除了下面2种情况以外,数组名就是数组第一个元素的地址,没有任何区别
- 数组名在sizeof()的括号里面,数组名代表的是整个数组,算的是整个数组的长度,单位是byte
- 数组名在&后面,数组名代表的是整个数组,取的是整个数组的地址
代码验证:
#include <stdio.h>
int main()
{
int arr_1[3] = { 0 };
int arr_2[3][4] = { 0 };
//数组名:除了下面2种情况以外,数组名就是数组第一个元素的地址,没有任何区别
//1.数组名在sizeof()的括号里面,数组名代表的是整个数组,算的是整个数组的长度,单位是byte
//2.数组名在&后面,数组名代表的是整个数组,取的是整个数组的地址
//
//通过下面4条输出,我们验证了我们的看法:数组名就是数组第一个元素的地址,没有任何区别
printf("%p\n", arr_1);
printf("%p\n", arr_1 + 1);
printf("----------------------\n");
printf("%p\n", &arr_1[0]);
printf("%p\n", &arr_1[0] + 1);
printf("----------------------\n");
//
//通过下面2条输出,我们可以看到:数组名在&后面,数组名代表的是整个数组,取的是整个数组的地址
//
printf("%p\n", &arr_1);
printf("%p\n", &arr_1 + 1);
printf("----------------------\n");
//计算2维数组的行数与列数
//
//计算行数:
//我们前面提过,在sizeof()中,数组名就是整个数组的长度
//而二维数组中,第一个“[]”表示的是行数,所以用“整个数组 / 每行的长度” ,就可以得出行数
//
int sz_row = sizeof(arr_2) / sizeof(arr_2[0]);
//
//计算列数:
//一行的长度 / 单个元素的长度
//
int sz_line = sizeof(arr_2[0]) / sizeof(arr_2[0][0]);
printf("%d\n", sz_row);
printf("%d\n", sz_line);
return 0;
}