C++ 二维指针心得

gw_editer gw_editer 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
C++ 二维指针心得,前几天用了一下二维指针,刚开始晕了,慢慢的搞明白了!有写的不对的地方还请指点!!
char **p = new char *[12];
\___即定义p[12] 申请了 12个p 指针的息栖地 向系统要了 12*4 byte 的空间存放 p[0]~p[11] ,而p[0]~p[11]是用来指向下面的地址,在这里既是一个数组的头所在的地址,见下面。

for(i = 0;i < 12 ; i++)
p[i] = new char[128];
每次申请 128byte 申请128次
实质 :当 i = 0;
char str[128];
p[0] -> str; 也就是p[0]指针指向一个新开辟的128byte的空间,p[1]~p[11] 同样。
所以**p 申请空间初始化的过程为
1、先分配*p的保存空间,用于保存p[0] ~ p[11]
2、再分配p[0]的指向空间,即真正存储内容的地方

与p[i][j] 比较
**p 申请的空间不一定连续,p[i]也有自己的存储空间
p[i][j] 的空间是连续的,p[i] 不需要存储
这里的比较是结合了自己的 C/C++ 经验,没用过汇编,可能代码优化后就变样了,都是连续存储!

**p空间的删除
for(i = 0;i < n; i++)
delete []p[i];

delete []p;

先删除最后开辟的空间 :p[i]指向的空间(内容保存的空间)因为是数组所以加上[],

在删除之前开辟的空间 :p 指向的空间,即p[i]指针的保存空间,因为是数组加上[]

有不对的地方请指点。。。一字千金啊!!!
...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部
gw_editer
C++ 语言 65,214 成员 250,514 内容