结论:数组名是个指针变量,存放的是数组首元素的地址!!!
一、一维数组
char arr[10] = "abcd"; //arr存放的是a的地址
下面将从三个常例子说明
例1.
printf("%s",arr); //通过首元素的地址,找到整个数组,打印abcd
例2.
int i = 0;
scanf("%d",&i);
arr + i //指针 + 数字 ,表示跳过了 i 个元素
例3.
*(arr + i) 等价于 arr[i] 都是解引用操作
从上都可以看出,数组名就是一个指针!
例外:sizeof(数组名)或者 &数组名 表示整个数组
sizeof(数组名) 括号里面只能是单独的数组名,表示整个数组的大小
&数组名,只能是单独的数组名 表示取整个数组的地址
二、二维数组:数组名存放的是首元素的地址(首元素是一维数组)
int arr[3][5] = { 0 };
理解:二维数组的元素可以看成是多个一维数组。
在arr中,3个元素都是是含有5个元素的一维数组。
for(int i= 0;i < 3; i++)
{
arr[i]…… //arr[i]就表示二维数组第一次解引用(获得一维数组的数组名,而一维数组的数组名就是一维数组首元素的地址)
}
两个例外,同一维数组
总结:除sizeof &数组名。数组名哦都表示首元素的地址