指针数组的动态分配问题

inti=1;int**p=newint*[3];//int*q=newint[3];//两个语句在内存分配中怎么解释,有什么区别?特别是指针数组动态分配p[0]=&i;... int i=1;
int **p=new int*[3]; //
int *q=new int[3]; // 两个语句在内存分配中怎么解释,有什么区别?特别是指针数组动态分配
p[0]=&i;
q[0]=i;
cout<<p[0]; // 输出i的地址
cout<<q[0]; // 输出i
说说我的理解,你看对不
int* q = new int[3]; 开辟一块连续的内存空间,空间大小是12字节,容纳3个int型数据,然后返回这块内存空间的起始地址给q,q指向这个起始地址,q[0]==*(q+0),q[1]==*(q+1),是个int型数据
int **p=new int*[3]; 开辟一块连续的内存空间,空间大小是多少来着?,容纳3个int*(即指针)型数据,然后返回这块内存空间的起始地址给p,因为这个地址是指针的地址,所以p的类型应该是int **.
p[0]是int *型,*p[0]才是int 型..对否?
展开
 我来答
空雪梦见
2013-12-14 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1268万
展开全部
其实这个很简单,你把int*合起来看,比如

typedef int* IntPtr;
然后以上代码就变成

IntPtr* p = new IntPtr[3];
int* q = new int[3];
p[0] = &i;
q[0] = i;
cout << p[0];
cout << q[0];
更多追问追答
追问
额 能说下上面的内存是怎样分配的吗?
追答
其实都一样

上面就是给你分配至少能容纳3个IntPtr的空间
下面就是给你分配至少能容纳3个int的空间
指针说到底也就是变量
在这个层面上和普通变量是没有区别的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式