如何将数组[]的地址存储在变量中
How store address of an array[] in a variable
这似乎是个愚蠢的问题。我有一个字符数组,想将数组的地址存储在另一个变量中,但似乎无法为数组地址声明正确的类型(我正在使用 gcc):
输入:
int main(void){
char cha[] = "abcde";
char **arrayAddress = &cha;
}
输出:
arrayaddress.c: In function ‘main’:
arrayaddress.c:3:25: warning: initialization of ‘char **’ from incompatible pointer type ‘char (*)[6]’ [-Wincompatible-pointer-types]
3 | char **arrayAddress = &cha;
| ^
这是意料之中的,我读过elsewherecha
的类型应该是char(*)[6]
。但是当我尝试用这种类型声明 arrayAddress
时,我的程序失败了:
输入:
int main(void){
char cha[] = "abcde";
char (*)[6]arrayAddress = &cha;
}
输出:
arrayaddress.c: In function ‘main’:
arrayaddress.c:3:10: error: expected identifier or ‘(’ before ‘)’ token
3 | char (*)[6]arrayAddress = &cha;
| ^
make: *** [<builtin>: arrayaddress] Error 1
^
如何正确定义arrayAddress
?
是written:
char (*arrayAddress)[6] = &cha;
请注意,变量的名称隐藏在表达式的中间。
数组衰减为指针。
char cha[] = "abcde";
char *p1 = cha;
char (*arrayptr)[sizeof(cha)] = &cha;
cha
、&cha[0]
和 &cha
引用数组 cha
的相同第一个元素,唯一的区别是类型。
cha
和 &cha[0]
具有类型:指向 char
的指针
&cha
具有类型:指向 6 char
个元素的数组的指针。
如果您的编译器支持 typeof
扩展(gcc 支持),那么您可以将指针定义为:
typeof(char (*)[6]) arrayAddress = &cha;
甚至更干净:
typeof(char[6]) * arrayAddress = &cha;
这似乎是个愚蠢的问题。我有一个字符数组,想将数组的地址存储在另一个变量中,但似乎无法为数组地址声明正确的类型(我正在使用 gcc):
输入:
int main(void){
char cha[] = "abcde";
char **arrayAddress = &cha;
}
输出:
arrayaddress.c: In function ‘main’:
arrayaddress.c:3:25: warning: initialization of ‘char **’ from incompatible pointer type ‘char (*)[6]’ [-Wincompatible-pointer-types]
3 | char **arrayAddress = &cha;
| ^
这是意料之中的,我读过elsewherecha
的类型应该是char(*)[6]
。但是当我尝试用这种类型声明 arrayAddress
时,我的程序失败了:
输入:
int main(void){
char cha[] = "abcde";
char (*)[6]arrayAddress = &cha;
}
输出:
arrayaddress.c: In function ‘main’:
arrayaddress.c:3:10: error: expected identifier or ‘(’ before ‘)’ token
3 | char (*)[6]arrayAddress = &cha;
| ^
make: *** [<builtin>: arrayaddress] Error 1
^
如何正确定义arrayAddress
?
是written:
char (*arrayAddress)[6] = &cha;
请注意,变量的名称隐藏在表达式的中间。
数组衰减为指针。
char cha[] = "abcde";
char *p1 = cha;
char (*arrayptr)[sizeof(cha)] = &cha;
cha
、&cha[0]
和 &cha
引用数组 cha
的相同第一个元素,唯一的区别是类型。
cha
和&cha[0]
具有类型:指向char
的指针
&cha
具有类型:指向 6char
个元素的数组的指针。
如果您的编译器支持 typeof
扩展(gcc 支持),那么您可以将指针定义为:
typeof(char (*)[6]) arrayAddress = &cha;
甚至更干净:
typeof(char[6]) * arrayAddress = &cha;