数组:相同类型元素的集合且空间连续
int arr[3] = {1,2,3};
int arr[5];
数组的名字:表示数组首元素的首地址,如arr
&数组名字:表示整个数组的地址,如&arr
sizeof(arr):是整个数组的大小
arr == &a[0];此时为数组中1的地址
arr+1;此时为数组中2的地址(表示往右偏移1个int)
&arr+1;表示往右偏移一个数组大小的偏移量,此时所表示的空间地址在数组中元素3的后面。
int arr[5] = {1,2,3,4,5};
*(&arr+1)因为发生了越界,所以结果为乱码
*((int *)&arr + 1) 结果为2
*((int *)((int)&arr + 1))结果十六进制表示为0x02000000
大部分计算机都是小端存储
二维数组
int arr[4][2] = {1,2,3,4,5,6,7,8,}
4个元素,每个元素有2个int构成
定义指针p指向数组arr
int (*p)[2] = arr == &arr[0];
*p ==arr[0] == &arr[0][0]
*p == arr[0][0]
那么(*p + 1)为2
**(p+1)为3