二级指针和内存四区的模型

  看了一下前面写的关于指针见解,以及关于内存四区的见解,然后感觉写的不是特别清楚,然后自己就画了一张图来表示他们之间的关系,我想如果能看懂我这张图,内存四区以及二级指针差不多就明白了;下面先上代码:

 1 #define    _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 
 6 void main()
 7 {
 8     int i = 0;
 9     //第一种:指针数组
10     char *a[] = {"aaa","bbb","cccc"};
11 
12     //二维数组
13     char b[3][4] = {"111","bb","333"};
14 
15     //二级指针:手工的分配内存空间
16     char **c = (char **)malloc(sizeof(char *) * 3);
17     
18     for(i = 0 ; i < 3; i++)
19     {
20         c[i] = (char *)malloc(sizeof(char) * 4);
21         sprintf(c[i],"%d",i);//将i以字符串的形式写入到分配的空间中
22     }
23     
24     system("pause");
25 }

  第一种是指针数组,即数组里储存的是一个个指针,这些指针全都指向了全局区,第二种是分配在栈区的二维数组,第三种是手工分配的内存空间;下面是关于这段代码的图;

  假设在全局区中aaa的地址是0xa11,bbb的地址是0xa12,cccc的地址是0xa13,则指针数组a里面的指针则分别指向了0xa11,0xa12,0xa13这三个地址,二维数组则直接是在栈区分配的空间,所以可以直接把数据存入到栈区中,而第三种则是先为二级指针在堆区分配了三个一级指针,然后又在栈区分配了3个4个字节的空间,又将堆区的三个指针分别指向了它们。

转载于:https://www.cnblogs.com/huhaihao/p/7674523.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值