数组标识符和数组标识符地址的区别

Zoo*_*mIn 3 c

我认为以下程序会清楚地说明我的疑问,所以我发布了该程序:

 #include <stdio.h>
int main() {

        int a[]={1,2,3,4,5};
        if(&a[0] == a)
                printf("Address of first element of an array is same as the value of array identifier\n");
        if(&a == a)
                printf("How can a value and address of an identifier be same?!");

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是输出链接:http : //ideone.com/KRiK0

caf*_*caf 5

当它不是sizeof或 一元运算&符的主题时,数组的计算结果为指向其第一个元素的(非左值)指针。

&a数组的地址也是如此aa计算结果为数组中第一个元素的地址a[0]

数组的地址和数组中第一个元素的地址相同并不奇怪(也就是说,尽管它们的类型不同,但它们指向相同的位置);structs也是如此。鉴于:

struct {
    int x;
    int y;
} s;
Run Code Online (Sandbox Code Playgroud)

然后&s&s.x指向相同的位置(但有不同的类型)。如果转换为void *它们,它们将比较相等。这与&aand完全类似&a[0](因此只是a)。