C语言 指针占4个字节 指针应该包含了一个数据地址 那这个数据地址占多大 我书上说是一个字节 。。。。
但书上又说32位的CPU可识别的数据地址在0-(2^32-1)那不是数据地址是0到4个字节的大小指针包含的数据地址到底有多大我是新手可能理解有问题求详解...
但书上又说32位的CPU可识别的数据地址在0-(2^32-1) 那不是数据地址是0到4个字节的大小 指针包含的数据地址到底有多大 我是新手可能理解有问题 求详解
展开
6个回答
展开全部
举例来说。指针值为x,则从地址x开始,包含了一个指针指向的值,它可以是一个整数,字符,字符数组等,具体有多大得看定义:
int* p; 这个指针指向了一个4字节大小的整数。
---------------------------
第二、指针大小为4个字节时,它就可以索引4g范围中任何一个值。
第三、指针这4个字节自然也在内存中的,但它可以不由其他指针指向,否则就没完没了了。它的相对位置在编译时已经确定了,程序从main起点执行后,只要访问这个相对位置,取出其中的值,就可以找到指针包含的内容。反映到汇编上,就是有无 [ ] 的区别了。
第四、32位cpu,这是说它一次访问内存取回数据的能力。现在的cpu虽然有很多是标注32位的,实际上总线已经扩大到40位以上了,只是操作系统不支持,所以也只能一次访问32位。
--------------------------
总结一下,在32位编程环境下,你不妨把指针看成32位的。它的值加在基址上,就是这个指针的管辖范围了。因为这个基址是可变的,理论上可以管辖大于4g的空间,但要硬件支持,也就是地址总线必须超过32位。同时指针也要受到权限的限制,就像你伸手进银行的窗口,人却未尽进得去一样,操作系统会提示一般保护性错误。
int* p; 这个指针指向了一个4字节大小的整数。
---------------------------
第二、指针大小为4个字节时,它就可以索引4g范围中任何一个值。
第三、指针这4个字节自然也在内存中的,但它可以不由其他指针指向,否则就没完没了了。它的相对位置在编译时已经确定了,程序从main起点执行后,只要访问这个相对位置,取出其中的值,就可以找到指针包含的内容。反映到汇编上,就是有无 [ ] 的区别了。
第四、32位cpu,这是说它一次访问内存取回数据的能力。现在的cpu虽然有很多是标注32位的,实际上总线已经扩大到40位以上了,只是操作系统不支持,所以也只能一次访问32位。
--------------------------
总结一下,在32位编程环境下,你不妨把指针看成32位的。它的值加在基址上,就是这个指针的管辖范围了。因为这个基址是可变的,理论上可以管辖大于4g的空间,但要硬件支持,也就是地址总线必须超过32位。同时指针也要受到权限的限制,就像你伸手进银行的窗口,人却未尽进得去一样,操作系统会提示一般保护性错误。
展开全部
虽然数据地址只占一个字节,但给指针分配的内存空间是4个字节。因此整型的单位就是4个字节。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int *p=NULL
sizeof(*p) 查看*p的大小 是4个字节
搞错 不是sizeof(*p) 这个是int 的类型
应该是sizeof(p)
抱歉~
sizeof(*p) 查看*p的大小 是4个字节
搞错 不是sizeof(*p) 这个是int 的类型
应该是sizeof(p)
抱歉~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
某些情况下,指向成员函数的指针长达16字节。
说四字节,主要是一些指针寄存器是四字节的,但寻址可以同时用两个指针寄存器。
CPU地址线的数目也不一定与寄存器位数相等的。
所以16位8086按理说只能用64K内存但别人却可以直接寻址1MB内存。
同理32位系统使用8G内存也是可能的。
底层的细节与硬件设计与操作系统是有关的。
所以讨论指针是多少字节是没有意义的,你问编译器就知道了:sizeof(Pointer)。
不过呢,你想作优化就不得不考虑指针大小。但这个和硬件是无关的,一般只和编译器有关。有篇论文好像叫《C++实现的最快委托》就讨论这个问题,你可以去烟酒一下。
说四字节,主要是一些指针寄存器是四字节的,但寻址可以同时用两个指针寄存器。
CPU地址线的数目也不一定与寄存器位数相等的。
所以16位8086按理说只能用64K内存但别人却可以直接寻址1MB内存。
同理32位系统使用8G内存也是可能的。
底层的细节与硬件设计与操作系统是有关的。
所以讨论指针是多少字节是没有意义的,你问编译器就知道了:sizeof(Pointer)。
不过呢,你想作优化就不得不考虑指针大小。但这个和硬件是无关的,一般只和编译器有关。有篇论文好像叫《C++实现的最快委托》就讨论这个问题,你可以去烟酒一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在32为机器上的确是占用四个字节
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个指针大小确实只有4个字节(某些机器上也不是),但是指针可寻址范围是0-(2^32-1)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询