如何将数组[]的地址存储在变量中

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 的相同第一个元素,唯一的区别是类型。

  1. cha&cha[0] 具有类型:指向 char
  2. 的指针
  3. &cha 具有类型:指向 6 char 个元素的数组的指针。

如果您的编译器支持 typeof 扩展(gcc 支持),那么您可以将指针定义为:

typeof(char (*)[6]) arrayAddress = &cha;

甚至更干净:

typeof(char[6]) * arrayAddress = &cha;