字符串数组的三种内存模型

第一种情况是,例如

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个指针大小的内存,并且分配了三个指针,其三个指针分别指向一个字符串的首地址,如图:

 

转载于:https://www.cnblogs.com/zhouquan-1992-04-06/p/6209030.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值