一维数组名和二维数组名到底是什么?
一维数组名的理解:
有两种特殊情况:sizeof(arr)和对数组名取地址
情况1:sizeof(arr)
对数组名求sizeof(arr)是计算整个数组的大小
#include <stdio.h>
int main()
{
/*
一维数组名的理解:
有两种特殊情况:sizeof(arr)和对数组名取地址
*/
int arr[9] = {1,2,3,4,5,6,7,8,9};
int len = sizeof(arr);//对数组名求sizeof(arr)是计算整个数组的大小
printf("%d\n",len);//36
return 0;
}
情况2:对一维数组名取地址&arr
#include <stdio.h>
int main()
{
/*
一维数组名的理解:
有两种特殊情况:sizeof(arr)和对数组名取地址
*/
int arr[9] = {1,2,3,4,5,6,7,8,9};
/*
情况二.
对一维数组名取地址是一个数组指针,需要用数组指针去接收
*/
int (*pARR)[9] = &arr;
for(int i = 0;i<9;i++)
{
printf("%d\n",(*pARR)[i]);//输出每一个数组中的元素
//另外一种访问方法(*pARR)解引用出来是arr,对数组名进行操作
printf("%d\n",*((*pARR)+i) );
}
return 0;
}
除了这两种情况外,一维数组名是指向第一个元素的指针 int *p = arr;
#include <stdio.h>
int main()
{
/*
一维数组名的理解:
有两种特殊情况:sizeof(arr)和对数组名取地址
*/
int arr[9] = {1,2,3,4,5,6,7,8,9};
/*
除了以上两种情况外,一维数组名arr是指向第一个元素的指针
*/
int *p = arr;
for(int i = 0;i<9;i++)
{
printf("%d",*(p+i));//输出每一个数组中的元素
}
return 0;
}