C 以下是什么意思?
我知道C 以下是什么意思?,c,arrays,C,Arrays,我知道sampleArray现在指向数组的第一个元素 然而,当我说&sampleArray时,它意味着什么?这是否意味着我正在获取sampleArray变量的地址?或者它是指二维数组变量 那么,我可以这样做吗: int sampleArray[] = {1,2,3,4,5}; 数组的名称计算为其地址(即其第一个元素的地址),因此sampleArray和&sampleArray具有相同的值 但是,它们的类型不同: sampleArray的类型为int*(即指向int的指针) &sampleAr
sampleArray
现在指向数组的第一个元素
然而,当我说&sampleArray
时,它意味着什么?这是否意味着我正在获取sampleArray
变量的地址?或者它是指二维数组变量
那么,我可以这样做吗:
int sampleArray[] = {1,2,3,4,5};
数组的名称计算为其地址(即其第一个元素的地址),因此
sampleArray
和&sampleArray
具有相同的值
但是,它们的类型不同:
的类型为sampleArray
(即指向int的指针)int*
的类型为&sampleArray
(即指向五个int的数组的指针)int(*)[5]
int(*p)[5]
声明指向五个int
s数组的指针p
。因此
int (*p)[5] = &sampleArray?
否,
sampleArray
实际上并不指向数组的第一个元素sampleArray
是数组
产生混淆的原因是,在大多数使用sampleArray
的地方,它将被指向数组第一个元素的指针所取代。“大多数位置”表示“它不是sizeof
或一元运算符的操作数的任何位置”
由于sampleArray
是数组本身,并且作为一元操作数-&
是保持其个性的地方之一,这意味着&sampleArray
是指向整个数组的指针。一些示例代码:
int (*p)[5] = &sampleArray; // well-formed :)
int (*p)[5] = sampleArray; // not well-formed :(
编译程序
$gcc—gcc(gcc)3.4.4版
(cygming special,gdc 0.12,使用dmd
0.125)版权(C)2004免费软件基金会,这是免费的
软件;请参阅复制的源代码
条件没有担保;不
即使是为了适销性或适合性
为了特定的目的
与往常一样,comp.lang.c常见问题解答已经解释了这一点:
您可能应该阅读。这被称为数组的内部化。数组是类似类型数据的集合,如int、char、float number等。“我知道sampleArray现在指向数组的第一个元素。”这是错误的
sampleArray
是一个数组,不是指针;它们不是一回事。不,sampleArray和&sampleArray有不同的值&sampleArray是sampleArray的地址。@WhirlWind实际上,如果您尝试它(不确定是否保证),它们具有相同的值。但是它们的类型不同。@whirwind-No…sampleArray和&sampleArray具有相同的值。编写一个简单的程序,自己尝试一下。次要nit:表达式sampleArray
的类型是int[5]
,在大多数上下文中,它会隐式(衰减)转换为int*
。
#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