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

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

 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个字节的空间,又将堆区的三个指针分别指向了它们。

posted @ 2017-10-15 22:03  SmartGame  阅读(550)  评论(0编辑  收藏  举报