对于32位环境,c中的指针大小

时间:2014-02-16 23:26:14

标签: c pointers size

如果数据类型不是整数,大小是否可以变化(对于指针)?我知道在32位环境中,整数的大小为4个字节。那么其他数据类型

4 个答案:

答案 0 :(得分:1)

C是一种在非常不同的环境中使用的语言,其中一些语言无视我们对计算机的偏见......

另一个重要区别是数据指针与函数指针:即使所有数据指针大小相同,您仍然可以拥有不同大小的void(*)(void)。例如,这可能比int*char*之间的不同大小更频繁。

关于您的问题:

  

如果数据类型不是整数,那么大小是否可以变化(对于指针)?

是。 C语言仅确保void*char*具有相同的大小。此外,所有struct指针都具有相同的大小。其他指针类型可能有不同的大小。

也就是说,大多数通常的环境(Windows,Linux,OS X)都有相同大小的每种指针类型:4位表示32位,8位表示64位。

好吧,除了MS-DOS / Win16。但是谁再使用它了? ;-)即使这样,大小的差异也不是指向的类型,而是指针的 farness 。当然,它是指数据还是代码。

更新:让我引用C99标准,6.2.5,第26段(强调我的):

  

指向void的指针应具有与a相同的表示和对齐要求   指向字符类型的指针。同样,指向合格或非限定版本的指针   兼容类型应具有相同的表示和对齐要求。所有   指向结构类型的指针应具有相同的表示和对齐要求   彼此相同。所有指向联合类型的指针都应具有相同的表示形式   对齐要求彼此。 指向其他类型的指针不需要具有相同的表示或对齐要求

答案 1 :(得分:0)

除了char的大小为1之外,您不能依赖任何大小。所有其他数据类型只具有必须可表示的最小范围。你甚至不能依赖1字节= 8位。如果您需要知道数据类型的大小,则应使用sizeofCHAR_BIT以获取字节中的位数。

答案 2 :(得分:0)

标准中没有要求指向不同类型的指针属于同一类型。但是,所有指针都必须可以转换为void*并返回。这意味着指针大小不能大于void*的大小,因为后者是最通用的指针。

答案 3 :(得分:-3)

不,指针大小将是相同的(在这种情况下为32位),无论指向什么。