点题
下面这行代码中数组名 arr 含义是什么?
int arr[10] = {0};
1、数组首地址
在大部分情况下,我们遇到数组名的时候,它就是数组首地址。
数组首地址就是数组的第一位元素的地址。
假设有这样一个数组int arr[10] = {1,2,3,4,5,6,7,8,9,10};
那么它的 数组名arr 就代表 arr[0] 也就是 元素 1 的地址。
示例:
2、两种特殊情况:
除去常见的数组首地址,还有比较少见的两种情况。
一是,&数组名,数组名表示整个数组。
二是,sizeof内部单独放一个数组名,数组名表示整个数组。
-
&arr – 整个数组的地址
当用取址符号 & 和数组名搭配时,那么取出的是整个数组地址。
示例:
当 arr 和 &arr 分别加一,前者跨过了首元素到第二个元素,于是多了 4;后者多了 40,跨过了整个数组,因此 &arr 代表着整个数组的地址。
注意:地址是十六进制,0x开头;整型int为 4 个字节。 十六进制数0x28转为十进制是40。
-
sizeof(arr) – 整个数组的大小(单位字节)
当使用操作符 sizeof ,它会返回一个内存字节数。
这行代码中 n 是多少?
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int n = sizeof(arr);
如图所见:
结果并不是4,而是40,是因为在这的 arr 不是数组首地址, sizeof内部单独放一个数组名,它计算的是整个数组的大小。