a其实代表的是数组中首元素的地址,即a[0]的地址,&a代表的是整个数组的起始地址。
int a[5]中
a+1=a+sizeof(int); 加4
&a+1=a+5*sizeof(int); 加20
sizeof(a)=20 表示整个数组的大小
sizeof(&a)=4 表示地址大小
测试(环境vs2012):
一、
char a[5]={'1','2','3','4','9'};
int b[5]={2,3,4,5,6};
printf("%d,%d\n",sizeof(&a),sizeof(&b));
输出结果为:4,4 得到的是地址的大小
二、
char a[5]={'1','2','3','4','9'};
int b[5]={2,3,4,5,6};
printf("%d,%d\n",sizeof(a),sizeof(b));
结果为:5,20 得到的是整个数组的大小
三、
char a[5]={'1','2','3','4','9'};
int b[5]={2,3,4,5,6};
printf("%d,%d\n",sizeof(&a),sizeof(&b[0]));
输出结果为:4,4
int a[5]中
a+1=a+sizeof(int); 加4
&a+1=a+5*sizeof(int); 加20
sizeof(a)=20 表示整个数组的大小
sizeof(&a)=4 表示地址大小
测试(环境vs2012):
一、
char a[5]={'1','2','3','4','9'};
int b[5]={2,3,4,5,6};
printf("%d,%d\n",sizeof(&a),sizeof(&b));
输出结果为:4,4 得到的是地址的大小
二、
char a[5]={'1','2','3','4','9'};
int b[5]={2,3,4,5,6};
printf("%d,%d\n",sizeof(a),sizeof(b));
结果为:5,20 得到的是整个数组的大小
三、
char a[5]={'1','2','3','4','9'};
int b[5]={2,3,4,5,6};
printf("%d,%d\n",sizeof(&a),sizeof(&b[0]));
输出结果为:4,4