你能告诉我为什么引用的价值 数组和数组本身的值有相同的值吗?
我知道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; }
答案 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
具有类型“指向T
(T (*)[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]