c/c++的指针大小如何确定?

代码如下:inta=0;int*p1;p1=&a;int*p2=newint[100];cout<<sizeof(a);cout<<sizeof(p1);cout<<si... 代码如下:
int a = 0;
int *p1 ;
p1 = &a;
int *p2 = new int[100];
cout<<sizeof(a);
cout<<sizeof(p1);
cout<<sizeof(p2);

我想知道 为什么结果是 4,4,4 而不是4,4,400? 我的理由是动态内存分配了p2 400字节的内存,结果应该是4,4,400.
展开
 我来答
mibaoxunbei
2014-11-29 · TA获得超过907个赞
知道小有建树答主
回答量:594
采纳率:0%
帮助的人:505万
展开全部
sizeof(p2)得到的是指针变量p2的大小,p2存储的是一个地址,32位系统环境就是4个字节,所以这里是4
int *p2 = new int[100]; 这句是分配了4*sizeof(int)这么大的内存空间,让p2指向了这段内存空间的首地址,并不是把p2变成了数组,p2还是那个p2,是个指针变量,只占4个字节的内存空间。
追问
但是我怕明明是动态分配100*sizeof(int),怎么会是4*sizeof(int)?还有,这样动态分配那么多内存有什么意义?是不是同一个地址可以装得下100个int类型的数据?
追答
哦,不好意思,笔误了,是100*sizeof(int)

这样的意义是有时候需要在运行期间动态分配足够的内存来使用,这样可以根据需要分配足够的内存,不浪费内存空间。
“同一个地址可以装得下100个int类型的数据”这个理解不对,只是p2存储了这100个int类型的数据的第一个数据的地址,对其后数据的访问是通过改变指针p2指向的位置来实现的,比如 *(p2+2)=1就是将第3个int型数据置为1
匿名用户
2014-11-29
展开全部
指针是指向int[100]数组的位置,可以理解为里面存储数组的内存地址,它只是指向数组的地址,也就是数组首元素的地址,而不是所有元素的地址都要存储,所以只有4
更多追问追答
追问
那么p2是占用了4字节还是400字节还是404字节?
追答
p2指占4字节,因为它只需要存储一个地址就好了,p2是变量,它的值可以改变然后访问数组的所有元素
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式