黑马程序员技术交流社区
标题: 数组的内存分析 [打印本页]
作者: Two_Lights 时间: 2016-1-11 08:16
标题: 数组的内存分析
#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;
}
作者: yangqi 时间: 2016-1-11 11:03
很好,看懂了前面一半{:2_34:}
作者: 海棠依旧2046 时间: 2016-1-11 12:15
分析内存真的很抽象啊,头大
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |