例如: Sizeof (char*)返回4。还有int* long long*,我试过的所有方法。有什么例外吗?
当前回答
据我所知,这是基于内存地址的大小。所以在一个32位地址方案的系统上,sizeof将返回4,因为那是4个字节。
其他回答
出于完整性和历史兴趣,在64位世界中,对于长类型和长类型的大小有不同的平台约定,分别命名为LLP64和LP64,主要在unix类型系统和Windows之间。一个名为ILP64的旧标准也使int = 64位宽。
微软保留了LLP64,其中longlong = 64位宽,但long保留为32位宽,以便于移植。
Type ILP64 LP64 LLP64
char 8 8 8
short 16 16 16
int 64 32 32
long 64 64 32
long long 64 64 64
pointer 64 64 64
来源:https://stackoverflow.com/a/384672/48026
在windows 32位机器上的Turbo C编译器中,指针和int的大小为2字节。
所以指针的大小是编译器特定的。但一般大多数编译器实现为支持32位4字节指针变量和64位8字节指针变量)。
所以指针的大小在所有机器上都是不一样的。
The size of the pointer basically depends on the architecture of the system in which it is implemented. For example the size of a pointer in 32 bit is 4 bytes (32 bit ) and 8 bytes(64 bit ) in a 64 bit machines. The bit types in a machine are nothing but memory address, that it can have. 32 bit machines can have 2^32 address space and 64 bit machines can have upto 2^64 address spaces. So a pointer (variable which points to a memory location) should be able to point to any of the memory address (2^32 for 32 bit and 2^64 for 64 bit) that a machines holds.
由于这个原因,我们看到指针的大小在32位机器中是4字节,在64位机器中是8字节。
只是已经发布的列表中的另一个例外。在32位平台上,指针可以占用6字节,而不是4字节:
#include <stdio.h>
#include <stdlib.h>
int main() {
char far* ptr; // note that this is a far pointer
printf( "%d\n", sizeof( ptr));
return EXIT_SUCCESS;
}
如果你用Open Watcom编译这个程序并运行它,你会得到6,因为它支持的远指针由32位偏移量和16位段值组成
如果您正在为64位机器编译,那么它可能是8。