3 回答
TA贡献1864条经验 获得超6个赞
A和&a的价值是一样的,怎么回事?
(void *) a == (void *) &a
它到底做了什么int(*p)[3];定义指向数组的指针,我知道,但是,指向数组的指针与指向数组的第一个元素的指针和数组的名称有什么不同呢?
a + 1 /* address of the second element of the array */&a + 1 /* address one past the last element of the array */
编辑:
T
T
sizeof
&
printf("a:%d\t&a:%d\n", a, &a);
printf("a:%d\t&a:%d\n", &a[0], &a);
d
p
void *
printf("a:%p\t&a:%p\n", (void *) a, (void *) &a);
printf("a:%p\t&a:%p\n", (void *) &a[0], (void *) &a);
TA贡献1827条经验 获得超4个赞
其他答案已经解释了这个问题。我正试着用一些图表来解释它。希望这会有帮助。
int a[3] = {5, 4, 6}
a
和
&a
有同样的价值。怎么回事?
a
a
a
0x100
0x100
a
&a
a
a
&a
它到底是做什么的 int (*p)[3];
声明一个指向数组的指针,我知道这一点。但是,指向数组的指针与指向数组的第一个元素的指针和数组的名称有什么不同呢?
&a
p
p
0x100
.
注:
..如 C
数组由引用传递(除 sizeof
职能)。
sizeof
sizeof
&
TA贡献1865条经验 获得超7个赞
a对应于指向数组第0元素的指针。然而,&.的情况也是如此,它只是给出了数组的起始地址。
a --> pointer pointing to starting element of array a[],it does not know about other element's location.
.
&a --->address location for storing array a[] which stores first element location,but knows every element's location
.
int(*p)[3]是指向数组的指针。如果是int*p[3],其含义将完全不同。这将意味着一系列的指针,这将是完全不同的上下文。
指向数组的指针将自动处理数组中的所有其他元素。
然而,指向数组的第一个元素的指针,即a只知道数组的第一个元素,您必须手动给指针算术方向来访问下一个元素。参见,在本例中-我们可以通过将2添加到a,即将第三个元素添加到a,即a+4,以此类推,从a获得第二个元素。/注意两者的区别,因为它是一个整数数组!
- 3 回答
- 0 关注
- 324 浏览
添加回答
举报