首页 > 解决方案 > c语言中指针的大小

问题描述

指针的大小是什么意思?指针的大小不应该取决于类型吗?大多数消息来源都说指针的大小是 4 字节还是 8 字节。我需要澄清一下这个说法。

标签: cpointers

解决方案


对于指针的大小,我的意思是将该指针保存在内存中或通过某个通道发送其值所需的位数(或字节),这(可能)与指针指向的对象的大小不同。

然后,可以假设指针大小通常为 32 或 64 位(4 或 8 字节)的断言是相当正确的,因为经常谈论的系统(计算机、智能手机和平板电脑)具有这种大小的指针。

但是周围还有其他系统,例如基于 DOS 的 PC 或嵌入式系统的微控制器,其中指针可以是 16 位宽甚至更小,以及总线宽度为 128 位的更大系统。

我过去使用 Intel 8051 CPU,它有 8 位宽、16 位宽和 24 位宽的指针。当然,它们不能自由混合……那个 CPU 确实很奇怪,有大约 3-4 个不同(而且很少)的内存区域;“专用”指针只能指向其特殊区域,而 24 位宽的指针可以指向任何区域,因为在高字节中有一个“选择器”。

另一个问题是指针指向的对象的大小。在普通计算机上它是一个字节,但有时,在某些系统上,不可能以这种方式寻址奇数地址上的字节,因此指针运算变得复杂。8051(我喜欢它!)甚至有指向位的指针!因此,指向对象的大小实际上是 8 个字节,并且将指针递增 1 可以或不能寻址与以前不同的内存位置。


推荐阅读