怎么区分指针所指向的内存的大小

c++中int*p0的指针指向一块32比特的内存的首地址,double*p1指向的是64位的内存的首地址,我们可以输出cout<<*p0<<p1<<endl,我们知道,指... c++中 int* p0的指针指向一块32比特的内存的首地址,double* p1指向的是64位的内存的首地址,我们可以输出 cout<<*p0<<p1<<endl,我们知道,指针指向的是内存的地址,系统怎么知道指向地址的长度,也就是说p0指向的32位,p1是64位?? 展开
 我来答
樱信全无YX
推荐于2016-04-10 · TA获得超过630个赞
知道小有建树答主
回答量:323
采纳率:100%
帮助的人:256万
展开全部
楼下回答的很到位,不过职业习惯我还是提醒一下提问者一些概念性的错误,如果楼主不是初学者,就当我没说:
1. 指针的大小,所有指针的大小都是32位的,sizeof(int*)跟sizeof(double*)都等于4
2. 指针指向内存的大小是不一定的,这个大小保存在进程内存管理链表中,目前在用户层编程还没有方法能获取到。
3. 指针的访问
实际上你可以理解成 *p = p[0]; 具体的访问手段与你的p指针的类型定义有关,编译器会根据不同的类型生成不同的汇编代码,例如int型可能就是一个mov,double型可能要两个mov,如果是个类变量可能会调用到拷贝构造函数等等。
追问
很谢谢你,我一直很好奇,在编译环节肯定会存在区别不同指针类型的指向内存大小的量,不然仅从指针变量本身来区别其指向内存大小似乎是不可能的,但是我一直没找到这样的方法,你的回答解释了我的问题。再次感谢。
beddy1
2012-10-19 · TA获得超过1989个赞
知道大有可为答主
回答量:2271
采纳率:0%
帮助的人:2200万
展开全部
C++ 知道长度的办法很简单的,这便是为什么指针需要指针具体类型的原因了。
既然是int*,那么指向的类型当然是int,所以长度必然就是int的大小。
C++是静态类型语言,所有变量的类型都需要在编译期间指明的,类型确定了,大小也就确定了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
靓丽还清湛的标兵5177
2012-10-19 · TA获得超过1649个赞
知道小有建树答主
回答量:1032
采纳率:100%
帮助的人:984万
展开全部
系统并不知道,是编译器知道
int* 和 double* 类型不同,编译器编译时检查类型并做相应的处理生成不同的机器码指令了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式