看到国内的教材这样写:
但是存在一些特殊情况。
- 第一种:数组作为&运算符的操作数
#include <stdio.h>
int main(void)
{
int a[] = {1,2,3};//创建一个数组
int *l;//一个指向整数的指针
int(*p) [3];//一个指向指向数组的指针
l=a;//数组名只能代表一个指向整数的指针
//p=a;
p=&a;//对数组名取地址才是指向数组的指针
printf("p=%p\n",p);
printf("l=%p\n",l);
printf("p+1=%p\n",p+1);
printf("l+1=%p\n",l+1);
return 0;
}
这个例子中,a这个数组名,在p=&a;这个语句中明显不代表数组首元素的地址,而是代表整个数组。
- 第二种情况:数组为sizeof运算符的操作数。
#include <stdio.h>
int main(void)
{
int a[] = {1,2,3};//创建一个数组
printf("size=%d\n",sizeof a);
return 0;
}
这个例子中,作为 sizeof 的操作数的数组名a,不代表数组首元素的地址。