引用的数组==数组

时间:2012-02-16 13:08:36

标签: c arrays pointers reference

你能告诉我为什么引用的价值 数组和数组本身的值有相同的值吗?

我知道a是一种int *但是& a它应该是int **或者我错了? 所以该值应该是指向int指针的指针。 示例代码:

    #include <stdio.h>

    int main()
    {
        int a[10];
        printf("a without ref.: 0x%x\n",a);
        printf("a with    ref.: 0x%x\n",&a);
        return 0;
    }

http://ideone.com/KClQJ

4 个答案:

答案 0 :(得分:4)

在这种情况下,数组的名称衰减为指向其第一个元素的指针。

答案 1 :(得分:1)

数组的名称将隐式转换为指针,除了两种情况,一种情况是“&amp; array”,另一种情况是“sizeof(array)”。在这两种情况下,数组的名称是一个数组,而不是指针。

例如:

int a[10];
int *p;
p = a;        //a is a pointer
p = &a;       //a is a array,&a is a constant pointer
sizeof(a);    //a is array

答案 2 :(得分:1)

给定数组声明T a[N],表达式&a具有类型“指向TT (*)[N])的N元素数组的指针,其值是基地址在这方面,一元&运算符对于数组的行为与对任何其他数据类型的行为相同。

C是如何处理数组表达式a的。除非它是sizeof或一元&运算符的操作数,或者是用于初始化声明中的另一个数组的字符串文字,否则类型为“N-element array of {{的数组表达式” 1}}“(T)将替换为(”decay to“)指针表达式”指向T [N]“(T)的类型,其值将是数组的第一个元素。我,T *

由于数组的第一个元素的地址与整个数组的基地址相同,因此表达式a == &a[0]a产生相同的,但类型不同(&a而不是T *)。

答案 3 :(得分:0)

如果有int * p指向a,则

a + 0 ==&amp; a [0] == p + 0 ==&amp; p [0]:地址

*(a + 0)== *(&amp; a [0])== *(p + 0)== *(&amp; p [0]):data

a ==&amp; a ==&amp; a [0]