原来数组的首地址这个说法是不对的。
经常看到很多地方说“数组的首地址”就是数组名。如int a[3]={1,2,3};那么a就是数组的首地址。可这个“首”字对吗?
今天做了一道题:
#include <stdio.h>
int main(void)
{
int a[3]={1,2,3};
printf("%d\n",a+1);
printf("%d\n",&a+1);
return 0;
}
加深了我对这一概念的理解。
原来数组是没有首地址的。只能够说一个数组的首元素的地址。上面的a不是首地址,是数组名,是指向首元素的指针。它和指向整个数组的指针的值是一样的。
所以a的值和&a的值是一样的。但是a+1和&a+1就不同了,类型不一样。这个1所代表的偏移不同,前一个是sizeof(int),后一个是sizeof(int)*3。
看起来一个小问题,但还是要搞清楚啊。