以下是什么意思?

vj0*_*j01 4 c arrays

int sampleArray[] = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)

我明白sampleArray现在指向数组的第一个元素.

但是,当我说的时候,它意味着什么&sampleArray?这是否意味着我得到sampleArray变量的地址?或者它是否意味着二维数组变量?

那么,我可以这样做:

int (*p)[5] = &sampleArray?
Run Code Online (Sandbox Code Playgroud)

caf*_*caf 9

不,sampleArray并没有真正指向数组的第一个元素. sampleArray 数组.

产生混淆是因为在您使用的大多数地方sampleArray,它将被替换为指向数组第一个元素的指针."大多数地方"的意思是"它不是一个sizeof或一元&运算符的操作数".

因为sampleArray数组本身,并且作为一元的操作数 - &是它保持个性的地方之一,这意味着它&sampleArray是指向整个数组的指针.


Jam*_*lis 7

数组的名称求其地址(这是它的第一个元素的地址),所以sampleArray&sampleArray具有相同的值.

但是,它们的类型不同:

  • sampleArray有一种类型int*(即指向int的指针)
  • &sampleArray有一种类型int (*)[5](即指向五个整数的数组的指针).

int (*p)[5]声明一个指向p五个数组的指针int.人机工程学,

int (*p)[5] = &sampleArray; // well-formed :)
int (*p)[5] = sampleArray;  // not well-formed :(
Run Code Online (Sandbox Code Playgroud)