除两种情况外,C语言中的数组名均表示数组中首元素的地址。
1. size(数组名),此时数组名表示整个数组,返回整个数组的大小(单位: 字节)
2. &数组名,此时数组名也表示整个数组,返回数组的地址(值与首元素地址相同,但意义不同)
针对第二点的详细解释:
#include <stdio.h>
int main() {
int arr[10] = { 0, 1 };
printf("%p\n", arr);
printf("%p\n", arr + 1);
printf("%p\n", arr + 2);
printf("----------------------------\n");
printf("%p\n", &arr[0]);
printf("%p\n", &arr[0] + 1);
printf("%p\n", &arr[0] + 2);
printf("----------------------------\n");
printf("%p\n", &arr);
printf("%p\n", &arr + 1);
printf("%p\n", &arr + 2);
}
控制台输出结果:
000000DF806FFA38
000000DF806FFA3C (+4)
000000DF806FFA40 (+4)
----------------------------
000000DF806FFA38
000000DF806FFA3C (+4)
000000DF806FFA40 (+4)
----------------------------
000000DF806FFA38
000000DF806FFA60 (+40)
000000DF806FFA88 (+40)
注意到,虽然数组的地址与其首元素的地址相同,但对其加减某整数后,变化的值为整个数组的长度的倍数.
除以上两种情况,数组名均表示此数组中首元素的地址.
另外,由上表述,可知二维数组的数组名也表示首元素的地址。只不过此时首元素同样为一个数组,也就是说此时二维数组的数组名表示第一个一维数组的地址。
通过融会贯通,在知识之间建立联系,才能更好地理解并掌握知识。