【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )
【摘要】
文章目录
前言一、指针数组二、二维数组三、自定义二维指针内存
前言
绘制如下
3
...
前言
绘制如下 3 3 3 种二级指针的内存模型 :
// I. 指针数组
char *p1 []= {"12", "ab", "34"};
// II. 二维数组
char p2[3][4] = {"12", "ab", "34"};
// III. 自定义二维指针内存
int i = 0, num=3;
char **p3 = (char **) malloc(sizeof(char) * 3);
for(i = 0; i < num; i++)
{
p[i] = (char *)malloc(sizeof (char) * 4);
sprintf(p[i], "%d%d", i + 1, i + 1);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
一、指针数组
绘制如下代码内存结构图 :
// I. 指针数组
char *p1[] = {"12", "ab", "34"};
- 1
- 2
指针数组 内存结构图 :
在 栈内存 中 , 是一个 指针数组 , 数组中有 3 3 3 个元素 , 都是指针数据类型 ;
指针 指向的 位置 是 全局区 的 常量区 ;
二、二维数组
绘制 二维数组 的内存模型图 :
// II. 二维数组
char p2[3][4] = {"12", "ab", "34"};
- 1
- 2
绘制结果如下 : 上述 二维数组 都在 栈内存中 ,
- 每个 一维数组 都占 4 4 4 字节 ;
- 一维数组中 , 默认值都为 ‘\0’ 字符 ;
- 注意 栈内存 生长方向是 从 高地址 -> 低地址 ;
- 注意 数组 的内存方向是从 低地址 -> 高地址 ,
p[0]
在低地址 ,p[1]
在高地址 ; - 全局区存在 初始化时 涉及到 的 相应字符串 常量 ;
三、自定义二维指针内存
绘制 自定义二维指针内存 的内存模型图 :
// III. 自定义二维指针内存
int i = 0, num=3;
char **p3 = (char **) malloc(sizeof(char) * 3);
for(i = 0; i < num; i++)
{
p[i] = (char *)malloc(sizeof (char) * 4);
sprintf(p[i], "%d%d", i + 1, i + 1);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
绘制结果如下 : 栈内存 中 只有一个 二维指针 , 其指向的 一维指针 都在 堆内存中 , 一维指针 也是指向 堆内存 中的数据 ;
注意 指针 指向 的是 内存块的 低地址 , 不要指错了位置 ;
全局区 中的 常量区 中 , 存在初始化的 字符串 常量 数据 ;
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/121585822
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)