C语言 指针占4个字节 指针应该包含了一个数据地址 那这个数据地址占多大 我书上说是一个字节 。。。。

2025-05-12 22:06:43
推荐回答(1个)
回答1:

举例来说。指针值为x,则从地址x开始,包含了一个指针指向的值,它可以是一个整数,字符,字符数组等,具体有多大得看定义:

int* p; 这个指针指向了一个4字节大小的整数。
---------------------------
第二、指针大小为4个字节时,它就可以索引4g范围中任何一个值。
第三、指针这4个字节自然也在内存中的,但它可以不由其他指针指向,否则就没完没了了。它的相对位置在编译时已经确定了,程序从main起点执行后,只要访问这个相对位置,取出其中的值,就可以找到指针包含的内容。反映到汇编上,就是有无 [ ] 的区别了。
第四、32位cpu,这是说它一次访问内存取回数据的能力。现在的cpu虽然有很多是标注32位的,实际上总线已经扩大到40位以上了,只是操作系统不支持,所以也只能一次访问32位。
--------------------------

总结一下,在32位编程环境下,你不妨把指针看成32位的。它的值加在基址上,就是这个指针的管辖范围了。因为这个基址是可变的,理论上可以管辖大于4g的空间,但要硬件支持,也就是地址总线必须超过32位。同时指针也要受到权限的限制,就像你伸手进银行的窗口,人却未尽进得去一样,操作系统会提示一般保护性错误。