数组首元素的首地址和数组的首地址是不同的。前者是数组元素的地址,而后者是数组整体的地址。两个东西的含义不同,但是数值上是相同的。
/*
*指针与数组的初步结合
*/
#include
int main(void)
{
int a[5] = {555, 444, 333, 222, 111};
int *p;
//p = &a; //编译结果warning: assignment from incompatible pointer type
//(不兼容指针类型的赋值),但是执行结果是对的。
//p = &a[0];//编译和执行都没有问题
p = a; // 编译和执行都没有问题
a = p; //编译会报错,因为数组名是个常量,所以不能赋值,所以数组名不做左值
printf("*p = %d.\n", *p);
return 0;
}
p = &a[0]等同于p = a;都表示数组首元素首地址
p = &a会报错是因为&a是整个数组的首地址
访问数组的两种方法
int a[5]; int *p; p = a;
数组的方式访问:a[0] a[1] a[2] a[3] a[4]
指针的方式访问:*p *(p+1) *(p+2) *(p+3) *(p+4)