如果数据类型不是整数,大小是否可以变化(对于指针)?我知道在32位环境中,整数的大小为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位。如果您需要知道数据类型的大小,则应使用sizeof
或CHAR_BIT
以获取字节中的位数。
答案 2 :(得分:0)
标准中没有要求指向不同类型的指针属于同一类型。但是,所有指针都必须可以转换为void*
并返回。这意味着指针大小不能大于void*
的大小,因为后者是最通用的指针。
答案 3 :(得分:-3)
不,指针大小将是相同的(在这种情况下为32位),无论指向什么。