以下是什么意思?

时间:2010-04-06 02:55:19

标签: c arrays

int sampleArray[] = {1,2,3,4,5};

我知道sampleArray现在指向数组的第一个元素。

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

那么,我可以这样做:

int (*p)[5] = &sampleArray?

5 个答案:

答案 0 :(得分:9)

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

出现混淆是因为在大多数使用sampleArray的地方,它将被替换为指向数组第一个元素的指针。 “大多数地方”的意思是“它不是sizeof或一元 - &运营商的操作数”。

由于sampleArray是数组本身,并且作为一元的操作数 - &是保持该个性的地方之一,这意味着&sampleArray是指向整个阵列。

答案 1 :(得分:7)

数组的名称求值为其地址(第一个元素的地址),因此sampleArray&sampleArray具有相同的值。

但它们的类型不同:

  • sampleArray的类型为int*(即指向int的指针)
  • &sampleArray的类型为int (*)[5](即指向五个整数数组的指针)。

int (*p)[5]向五个p的数组声明指针int。 Ergo,

int (*p)[5] = &sampleArray; // well-formed :)
int (*p)[5] = sampleArray;  // not well-formed :(

答案 2 :(得分:1)

答案 3 :(得分:0)

一些示例代码:

#include <stdio.h>

int main()
{
  int a[] = {1,2,3,4,5};
  int (*p)[5] = &a; 
  //Note
  //int (*p)[5] = a; // builds (with warnings) and in this case appears to give the same result

  printf( "a = 0x%x\n" , (int *)a);
  printf( "&a = 0x%x\n", (int *)(&a));
  printf( "p = 0x%x", (int *)p);

  return;
}

输出 - 两种方式相同。

$ ./a.exe 
a = 0x22cd10
&a = 0x22cd10
p = 0x22cd10

编译器

  

$ gcc --version gcc(GCC)3.4.4   (cygming special,gdc 0.12,使用dmd   0.125)版权所有(C)2004 Free Software Foundation,Inc。这是免费的   软件;看到复制的来源   条件。没有保修;不   即使是适销性或健身   特别针对目的。

答案 4 :(得分:0)

这称为阵列的绝缘。 array是类似于int,char,float number之类的类似数据的集合。