首先展示一下重点:
- sizeof(数组名),sizeof中单独放数组名,这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。
- &数组名,这里的数组名也表示整个数组,取出的是整个数组的地址(这与数组首元素的地址是有区别的,具体解释请看下文)
- 除此之外,任何地方使用数组名,数组名都表示首元素的地址
试一下以下代码:
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
printf("&arr[0] = %p\n", &arr[0]);
printf("arr = %p\n", arr);
printf("&arr =%p\n", &arr);
return 0;
}
发现三者打印的结果一模一样,由上面的重点可知,&arr[0]和arr都表示数组首元素地址,那么这两者与&arr的区别是什么呢?
不妨加1试试!
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
printf("&arr[0] = %p\n", &arr[0]);
printf("&arr[0]+1 = %p\n", &arr[0]+1);
printf("arr = %p\n", arr);
printf("arr+1 = %p\n", arr+1);
printf("&arr =%p\n", &arr);
printf("&arr+1 =%p\n", &arr+1);
return 0;
}
输出结果:
&arr[0] = 00EFFD30
&arr[0]+1 = 00EFFD34
arr = 00EFFD30
arr+1 = 00EFFD34
&arr =00EFFD30
&arr+1 =00EFFD58
这里我们发现,&arr[0]与&arr[0]+1相差4个字节,arr和arr+1也相差4个字节,而&arr与&arr+1相差了40个字节
这就体现出首元素地址与数组地址的区别了:首元素地址+1跳过一个元素,而数组地址+1则是跳过整个数组。