为什么char [512]的地址等于该char [512]

时间:2018-09-12 07:33:20

标签: c pointers char

当我声明一个变量

char buf[512];

&buf是什么意思?

似乎等于buf

printf(" buf :  %p %p\n", (void *) buf, (void *) &buf);

打印:

buf :  0x7ffda6053fe0 0x7ffda6053fe0

2 个答案:

答案 0 :(得分:0)

它是数组中第一个元素的地址(即buf [0]的地址)与数组本身的地址(即buf)。它们相等并不奇怪。

答案 1 :(得分:0)

地址相同,因为数组在传递时会衰减为指向第一个元素的指针,另一方面,地址运算符&会获得数组的地址,即第一个元素的地址和数组本身的地址相同。

使用%p代替%d来打印地址:

printf(" buf :  %p %p\n", (void *)buf, (void *)&buf);