书上说,数组名是个指针常量,指向数组首元素的地址。于是我做了个实验:
#include <stdio.h>
int main(void)
{
int a[3] = {1, 2, 3};
printf("%p %p %p", &a, a, &a[0]);
return 0;
}
运行结果如下:
000000000061FE14 000000000061FE14 000000000061FE14
疑惑来了:
2.就算是常量表达式,那么它指向的地址怎么和保存自身的地址相等呢?
当然,数组怎么用我会,研究这个有点较真了,但还是希望专家答疑解惑。
数组名前边加&已经不是普通的取地址符了。虽然值一样,但编译器对a+1和&a+1的处理是不一样的
a是一个指针常量,指针常量的意思是他是一个值不能改变的变量,是变量就会有地址,因为要存储在内存中,存储在内存中就会有地址,a的值恰巧也是自己的地址,这就是数组的特性
第一个问题,a是指针常量,不能改变指向的值,相当于int * const p
第二个问题,这是一个特殊的语法规定,a虽然和&a值一样,但是类型不一样。