字符串数组的三种内存模型
第一种情况是,例如
char *p[] = {"abc", "123", "kkii"};
本质是定义了一个指针数组,其中有三个字符指针,指针分别指向全局区的某个字符串的首地址。内存模型如下:
第二种情况是,例如:
char p[3][4] = {"abc", "123", "jkl"};
其本质是在栈区开辟了一个字符串数组,它分成了三个内存区域,每个内存区域含有一个字符串,最大长度不超过3,内存模型如下:
第三种情况,例如:
int i ; char **p = NULL; p = (char **c)malloc(sizeof(char *) * 3); for(i = 0;i < 3; ++i){ p[i] = (char *)malloc(sizeof(char) * 4); }
p[0] = "abc";
p[1] = "123";
p[2] = "jkl";
其本质是现在栈区分配一个指针变量p,指向堆区一块3个指针大小的内存,并且分配了三个指针,其三个指针分别指向一个字符串的首地址,如图: