在绝大多数现代的、符合标准的 C 语言实现(例如在 Windows、Linux、macOS 上使用 GCC、Clang 或 MSVC 编译器)中:

(图片来源网络,侵删)
sizeof(double)
的值是 8。
这意味着一个 double 类型的变量通常占用 8 个字节 的内存空间。
详细解释
sizeof 是什么?
sizeof 是 C 语言的一个编译时操作符,而不是一个函数,它的作用是返回一个变量或数据类型在内存中所占用的字节数。
- 编译时计算:
sizeof的值在程序编译时就已经确定了,而不是在运行时才计算,使用sizeof不会给程序带来运行时开销。 - 返回类型:
sizeof的返回类型是size_t,这是一个无符号整型,定义在<stddef.h>头文件中,它足够大,可以表示任何对象的大小。
double 数据类型
double 是 C 语言中的基本浮点类型之一,全称是 "double-precision floating-point"(双精度浮点数)。

(图片来源网络,侵删)
- 用途:用于存储带有小数的实数,比
float(单精度浮点数)提供更高的精度和更大的表示范围。 - 遵循标准:
double的具体大小由 C 语言标准规定,但标准允许一定的灵活性,在 IEEE 754 标准被广泛采纳后,double的大小就基本固定了。
为什么 sizeof(double) 通常是 8?
这主要归功于 IEEE 754 标准,这是现代计算机上浮点数运算的事实标准。
- IEEE 754 双精度格式:
- 总位数:64 位(即 8 个字节)。
- 符号位:1 位(决定数的正负)。
- 指数位:11 位(决定数的范围和大小)。
- 尾数位:52 位(决定数的精度)。
因为 64 位等于 8 字节,sizeof(double) 的值就是 8。
如何验证?
你可以写一个简单的 C 程序来验证在你的系统上 sizeof(double) 的值。
#include <stdio.h>
int main() {
// 打印各种基本数据类型的大小
printf("Size of char: %zu bytes\n", sizeof(char));
printf("Size of short: %zu bytes\n", sizeof(short));
printf("Size of int: %zu bytes\n", sizeof(int));
printf("Size of long: %zu bytes\n", sizeof(long));
printf("Size of long long: %zu bytes\n", sizeof(long long));
printf("Size of float: %zu bytes\n", sizeof(float));
printf("Size of double: %zu bytes\n", sizeof(double)); // 重点查看这个
printf("Size of long double: %zu bytes\n", sizeof(long double));
return 0;
}
运行结果示例(在 64 位 Linux/macOS 系统上):

(图片来源网络,侵删)
Size of char: 1 bytes
Size of short: 2 bytes
Size of int: 4 bytes
Size of long: 8 bytes
Size of long long: 8 bytes
Size of float: 4 bytes
Size of double: 8 bytes // <-- 这就是我们关心的结果
Size of long double: 16 bytes
重要注意事项:平台依赖性
虽然 sizeof(double) 在现代系统上几乎总是 8,但 C 语言标准并没有强制规定它必须是 8,理论上,编译器可以有不同的实现。
float:标准规定sizeof(float)>=sizeof(char),sizeof(double)>=sizeof(float)。long double:这是精度最高的浮点类型,其大小在不同编译器和平台上差异最大,在 64 位 Linux 上通常是 16 字节,而在某些旧系统或 MSVC 上可能是 8 字节或 12 字节。
虽然你可以放心地在 99% 的情况下认为 sizeof(double) 是 8,但如果你编写的程序需要极高的可移植性,并且对数据大小有严格要求,最好还是通过 sizeof 操作符在代码中动态获取,而不是硬编码数字 8。
| 问题 | 答案 |
|---|---|
sizeof(double) 的值是多少? |
在绝大多数现代系统上是 8。 |
| 单位是什么? | 字节。 |
| 为什么是这个值? | 因为它遵循 IEEE 754 双精度浮点数标准,该标准规定 double 占用 64位,即 8字节。 |
sizeof 是函数还是操作符? |
操作符,在编译时计算。 |
| 返回类型是什么? | size_t。 |
| 需要注意什么? | 虽然几乎总是 8,但 C 标准未强制规定,因此在追求极致可移植性的代码中应避免硬编码。 |
希望这个详细的解释能帮助你完全理解 sizeof(double) 在 C 语言中的含义!
