我找到了这个问题的不同答案,我知道必须有一个确定的答案。 C中四种主要数据类型的最小分配内存大小是多少?我正在考虑int
,double
,float
和char
。 signed
或unsigned
类型会以任何方式改变大小吗?
答案 0 :(得分:7)
ANSI C为各种原始数据类型定义了以下大小。
浮点数和双精度数有更多规则,但通常,浮点数的范围是< =双精度范围(对于现代机器---浮点数是4个字节,双精度数是8)。
答案 1 :(得分:2)
标准只保证char
字节1
其余类型具有实现定义的大小。
答案 2 :(得分:2)
签名或未签名类型是否会以任何方式改变大小?
没有。它只影响持有的数据范围。有关短数据类型(2个字节),请参见下面的示例。
答案 3 :(得分:1)
您可以使用sizeof(variable)
:
作为在我的本地计算机上运行此示例的示例:
sizeof (char) = 1
sizeof (double) = 8
sizeof (float) = 4
sizeof (int) = 4
sizeof (long) = 4
sizeof (long long) = 8
sizeof (short) = 2
sizeof (void *) = 4
注意:您获得的值可能由OS /编译器/ CPU架构决定。
答案 4 :(得分:1)
这是一个很好的问题。我推荐你到C99 6.2.5。 Wikipedia C data types文章很好。
sizeof()
)定义的实现。不仅如此,规范还允许填充比特(例如用于纠错)。因此,在8位字符系统上,如果sizeof(int)
为4,则最大int不一定是2 ^ 31-1,因为规范允许其中一些位用作“填充”。因此,唯一可以确定的方法是使用limits.h
!float / double也是实现定义的,尽管double总是大于float。通常这些实现由与IEEE-754规范兼容的实现定义(分别需要至少32位和64位),但C99不需要它。但是如果你的字符大小是32位,那么sizeof(float)可能只有1。
签名/未签名不会更改大小。
由于这些原因,<stdint.h>
是C语言最重要的新增内容之一。在此之前,编写跨平台代码非常困难。
答案 5 :(得分:-1)
写一个小测试程序,亲眼看看:
int main(int argc, char* argv[])
{
printf("%d\n", sizeof(char) );
printf("%d\n", sizeof(int) );
printf("%d\n", sizeof(unsigned char) );
printf("%d\n", sizeof(unsigned int) );
printf("%d\n", sizeof(double) );
printf("%d\n", sizeof(float) );
return 0;
}
“int,float,double”与平台有关(16,32,64)。符号不影响大小,只有解释。