目录
前言
个人认为C语言中数组名可以分为三种情况:
- 所有数组名都表示首元素的地址。
- sizeof(数组名)-计算整个数组大小
- &数组名 -取整个数组的地址
代码展示
输出结果我注释在代码后面,供大家参考。(后面将做出解释)
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
//数组名表示数组首元素的地址
printf("%p\n", &arr[0]); //0000006D991DF5A8
printf("%p\n", arr); //0000006D991DF5A8
//特例1:sizeof(数组名)--数组名表示整个数组,单位是字节
int sz = sizeof(arr);
printf("%d\n", sz); //40
//特例2:取整个数组的地址 &数组名--数组名表示整个数组
printf("%p\n", &arr); //0000006D991DF5A8
printf("%p\n", &arr[0]); //0000006D991DF5A8
printf("%p\n", arr); //0000006D991DF5A8
//对比验证特例2
printf("%p\n", &arr); //0000006D991DF5A8
printf("%p\n", &arr+1); //0000006D991DF5D0
printf("%p\n", arr); //0000006D991DF5A8
printf("%p\n", arr+1); //0000006D991DF5AC
printf("%p\n", &arr[0]); //0000006D991DF5A8
printf("%p\n", &arr[1]); //0000006D991DF5AC
return 0;
}
内容解释
情况1
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
//数组名表示数组首元素的地址
printf("%p\n", &arr[0]); //0000006D991DF5A8
printf("%p\n", arr); //0000006D991DF5A8
return 0;
}
第6行代码,我们输出数组arr的首元素地址
第7行代码,我们输出数组名arr
可以看到二者输出结果均为0000006D991DF5A8,则证明数组名表示数组首元素的地址。
情况2
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
//特例1:sizeof(数组名)--数组名表示整个数组,单位是字节
int sz = sizeof(arr);
printf("%d\n", sz); //40
return 0;
}
sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数
组;而不是数组首字母地址。
情况3
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
//特例2:取整个数组的地址 &数组名--数组名表示整个数组
printf("%p\n", &arr); //0000006D991DF5A8
printf("%p\n", &arr[0]); //0000006D991DF5A8
printf("%p\n", arr); //0000006D991DF5A8
//对比验证特例2
printf("%p\n", &arr); //0000006D991DF5A8
printf("%p\n", &arr+1); //0000006D991DF5D0
printf("%p\n", arr); //0000006D991DF5A8
printf("%p\n", arr+1); //0000006D991DF5AC
printf("%p\n", &arr[0]); //0000006D991DF5A8
printf("%p\n", &arr[1]); //0000006D991DF5AC
return 0;
}
&数组名,取出的是数组的地址。&数组名,数组名表示整个数组。
这里我们可以发现第7、8、9行代码,输出结果均为0000006D991DF5A8,但是他们表达的意义不同。第7行 &数组名,取出的是整个数组的地址(可以理解为一个小区的一栋单元楼,第一层住户的地址即可代表整栋单元楼----假设一楼一户);第8,9行则是指出数组中首元素的地址(一栋单元楼中一层住户个体地址)
下面我们进行对比验证
12行、13行相差28(十六进制,即十进制40)
14行、15行相差1
16行、17行相差1
由此我们可以得出,&数组名+1 得到下一个数组地址(下一栋单元楼);而 数组名+1 与 首元素+1 得到的是数组中下一个元素(本单元楼的二楼住户)。
内容若有错误,请大家在评论区指出!谢谢阅读!