C和C++中sizeof的细节问题

在一本书上看到个关于sizeof细节问题,一开始挺迷惑的。

char *words[] = {"stately", "plump", "buck", "mulligan"};
sizeof_t words_size = sizeof(words)/sizeof(char *);
/*看得我有点迷惑,然后把它拆开来看*/
words_size = sizeof(words);
//words_size是多少?????
//答案有几种可能,有的是32,有的是16
wors_size = sizeof(char *);
//words_size又是多少呢?
//答案是8,或4
对于sizeof(words),words是个二维指针,也就是有4个字符串指针,只有知道每个字符串指针大小,然后乘以4就是words的大小了。

在同一台机器上,除了函数指针以外,其它一维指针的大小都是相同的。

比如说

sizeof(int *) ==  sizeof(char *) == sizeof(float *) == sizeof(double *)

但是具体的大小得看机器模型。

可以看下面这张表

Datatype LP64 ILP64 LLP64 ILP32 LP32
char 8 8 8 8 8
short 16 16 16 16 16
_int32   32      
int 32 64 32 32 16
long 64 64 32 32 32
long long     64    
pointer 64 64 64 32 32

如果机器是LP64模型的,指针类型就是long型的,64位8个字节

如果机器是


你可能感兴趣的:(C++,c,float)