gpt4 book ai didi

c - 32位环境下c中指针的大小

转载 作者:行者123 更新时间:2023-11-30 18:15:34 25 4
gpt4 key购买 nike

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

最佳答案

C 是一种在非常不同的环境中使用的语言,其中一些违背了我们对计算机的先入之见......

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

关于您的问题:

Can the size vary (for a pointer) if the data type is not an integer?

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

也就是说,大多数常见环境(Windows、Linux、OS X)的每种指针类型的大小都相同:4 个用于 32 位,8 个用于 64 位。

嗯,除了 MS-DOS/Win16。但谁还用它呢? ;-) 即使如此,大小的差异也不是指向的类型,而是指针的。当然,无论它指向数据还是代码。

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

A pointer to void shall have the same representation and alignment requirements as a pointer to a character type. Similarly, pointers to qualified or unqualified versions of compatible types shall have the same representation and alignment requirements. All pointers to structure types shall have the same representation and alignment requirements as each other. All pointers to union types shall have the same representation and alignment requirements as each other. Pointers to other types need not have the same representation or alignment requirements.

关于c - 32位环境下c中指针的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21818235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com