#include <stdio.h>
int main(int argc, const char * argv[]) {
//定义一个二维数组 int arr[2][3] = { {1,2,3}, // arr[0] 第一行 {4,5,6} // arr[1] 第二行 };
for (int i= 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%p ",&arr[j]);
}
printf("\n");
}
/* arr[0][0] 0x7fff5fbff770 0x7fff5fbff774 0x7fff5fbff778 ----> arr[0] 0x7fff5fbff77c 0x7fff5fbff780 0x7fff5fbff784 ----> arr[1] */
printf("--------------\n");
// &arr == arr == arr[0] == &arr[0] == &arr[0][0] ---> 数组的首地址
printf("&arr = %p\n",&arr); // 整个数组的地址 printf("arr = %p\n",arr); // 数组名--> 第一行元素的地址 (行地址) --> &arr[0] printf("arr[0] = %p\n",arr[0]);// 第一行第一个元素的地址 --> & arr[0][0] printf("&arr[0] = %p\n",&arr[0]);// 第一个元素的地址 (行地址) printf("&arr[0][0] = %p\n",&arr[0][0]); //第一行第一个元素的地址
printf("--------------\n");
printf("&arr+1 = %p\n",&arr+1); // 以整个数组为长度 + 1 越界 0x7fff5fbff788 printf("arr+1 = %p\n",arr+1); // 以第一行元素为长度+1 0x7fff5fbff77c printf("arr[0]+1 = %p\n",arr[0]+1);// 以第一行第一个元素为长度+1 0x7fff5fbff774 printf("&arr[0]+1 = %p\n",&arr[0]+1);// 以第一行元素为长度+1 0x7fff5fbff77c printf("&arr[0][0]+1 = %p\n",&arr[0][0]+1); //以第一行第一个元素为长度+1 0x7fff5fbff774
return 0; }
|