C++ 二维指针心得
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]指针的保存空间,因为是数组加上[]
有不对的地方请指点。。。一字千金啊!!!
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]指针的保存空间,因为是数组加上[]
有不对的地方请指点。。。一字千金啊!!!
...全文
相关推荐
c++笔记.docx
记录了个人对C++的学习心得,虽然可能理解不到位,但是也是个人的一点点小小记录吧。
青牛软件笔试心得.doc
青牛软件笔试心得.doc
《B站-青岛大学-王卓老师-数据结构与算法基础》自学心得、笔记(C++语言实现).zip
《B站-青岛大学-王卓老师-数据结构与算法基础》自学心得、笔记(C++语言实现).zip
C++中指针指向二维数组实例详解
C++中指针指向二维数组实例详解 一维指针通常用指针表示,其指向的地址是数组第一元素所在的内存地址,如下 int ary[4][5]; int(*aryp)[5] = ary; 那么ary[4]相当于int(*aryp),以下理解如此,但参数传递需要知道实参所在 的一维个数,所以传递的时候应该传递多一个参数,子数组的引用可以理解 为(*p),那么取元素就是(*p)[i],如下 void printVal(int(*aryp)[5],int irowCount){ for (int(*p)[5] = aryp; p != aryp + irowCount;p++) { for
c++ 二级指针与二维数组之间值操作
只有6行代码,非常简洁,这是char二级指针给char二维数组赋值的逻辑。二级指针需要先赋值操作,加断点就可以看见二维数组里的值了。


