目录
1.一维数组数组名的理解
从上图可以看出arr是首元素地址。
那么int n = sizeof(arr);这里的arr指的是什么?
//数组名是什么?
#include<stdio.h>
int main()
{
int arr[10];
printf("%p\n", arr);
printf("%p\n", &arr[0]);
int n = sizeof(arr);//
printf("%d\n", n);
return 0;
}
输出结果是:
问:如果arr表示首元素地址的话,为什么n打印出来是40,而不是4?
答:数组名确实能表示首元素的地址,但是有两个例外。
1.sizeof(数组名),这里的数组名表示整个数组的大小,计算的是整个数组的大小,单位是字节。
2.&数组名,这里的数组名表示整个数组,取出来的是整个数组的地址。
关于&arr的理解:
#include<stdio.h>
//数组名确实能表示首元素的地址
//但是有两个例外
//1.sizeof(数组名),这里的数组名表示整个数组的大小,计算的是整个数组的大小,单位是字节
//2.&数组名,这里的数组名表示整个数组,取出来的是整个数组的地址
int main()
{
int arr[10] = {0};
printf("%p\n", arr);
printf("%p\n", &arr[0]);
printf("%p\n", &arr);
//int n = sizeof(arr);//计算的是整个数组的大小
//printf("%d\n", n);
return 0;
}
输出结果是:
问:&arr取出来的不是整个数组的地址?为什么它打印出来的数组地址跟前面两个的首元素地址相同?
答:
那么打印&arr[0]与打印&arr有什么区别呢?
//当我们在它们后面+1时
int arr[10] = {0};
printf("%p\n", arr);
printf("%p\n", arr+1);printf("------------------------\n");
printf("%p\n", &arr[0]);
printf("%p\n", &arr[0]+1);printf("------------------------\n");
printf("%p\n", &arr);
printf("%p\n", &arr+1);
打印的结果是:
它们的区,如图所示:
除了上面的两个例外,其他的所以arr指的都是首元素地址!
2.二维数组数组名的理解
sizeof(数组名),这里的数组名表示整个数组的大小,计算的是整个数组的大小,单位是字节。