在对数组有一定了解后我们会遇到一些问题,本文章将尽可能的讲解一些常见错误。
文章目录
- 1.数组名,&数组名分别代表什么?
- 2.数组形式做形参时是传的整个数组还是首元素地址?
- 3.为什么在主函数中用sizeof(arr)计算出的结果是整个数组的长度?arr不是说首地址码?
- 二维数组arr[0],arr[1]表示什么
1.数组名,&数组名分别代表什么?
#include<stdio.h>
int main() {
int arr[10] = { 9,8,7,4,3,5,2,0,1,6 };
printf("%p \n", arr);
printf("%p \n", &arr);
return 0;
}
结果:
可以看到结果相同,但是他们的本质却是不同的我们来看
#include<stdio.h>
int main() {
int arr[10] = { 9,8,7,4,3,5,2,0,1,6 };
printf("arr =%p \n", arr);
printf("&arr[0] =%p \n", &arr[0]);
printf("&arr =%p \n", &arr);
printf("arr+1 =%p \n", arr + 1);
printf("&arr[0]+1 =%p \n", &arr[0] + 1);
printf("&arr+1 =%p \n", &arr+1);
printf("arr =%d \n", arr);
printf("&arr+1 =%d \n", &arr + 1);
return 0;
}
结果:
,由结果我们可以知道&arr+1加的这个1是整个数组所占据的空间40,所以&arr指向的是整个数组的首地址,而数组名arr,&arr[0]指向的是数组元素的首地址
2.数组形式做形参时是传的整个数组还是首元素地址?
传的是首元素地址,为了提高效率,不可能把数组中所有的元素都传过去
所以在子函数中sizeof(arr)计算出的结果是4/8,而不是整个数组长度
3.为什么在主函数中用sizeof(arr)计算出的结果是整个数组的长度?arr不是说首地址码?
注意:sizeof操作符在使用时有两个例外
- sizeof(数组名),这里的数组名是表示整个数组,计算的是整个数组的大小,单位是字节
- &数组名,这里的数组名是表示整个数组,&数组名取出的是数组的地址
二维数组arr[0],arr[1]表示什么
#include<stdio.h>
int main() {
int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
printf("%p\n", arr[0]);
printf("%p\n", arr[1]);
printf("%p\n", arr[2]);
return 0;
}
}
结果:
二维数组可以看做一维数组的一维数组,由相差正好可以得出16arr[0]就代表arr[0][0], arr[1]就代表arr[1][0],arr[2]就代表arr[2][0]