在C语言中,变量所占的字节数取决于其数据类型以及运行程序的计算机架构(特别是其字长和操作系统)。下面是一些常见数据类型在大多数现代32位和64位系统上的大致字节数。请注意,这些数值可能会因编译器、操作系统或特定的硬件平台而有所不同。
32位系统(典型)
char
: 1字节signed char
: 1字节unsigned char
: 1字节short
: 2字节int
: 4字节long
: 4字节long long
: 8字节float
: 4字节double
: 8字节long double
: 取决于系统和编译器,通常是8字节或12字节- 指针(如
int *
或char *
): 4字节
64位系统(典型)
char
: 1字节signed char
: 1字节unsigned char
: 1字节short
: 2字节int
: 通常情况下是4字节(但某些系统或编译器可能使用8字节)long
: 在大多数64位系统上,long
是8字节long long
: 8字节float
: 4字节double
: 8字节long double
: 取决于系统和编译器,但通常是16字节- 指针(如
int *
或char *
): 8字节
其他注意事项
bool
类型的大小取决于编译器实现,但通常是1字节。- 结构体(
struct
)和联合体(union
)的大小取决于其成员的大小和内存对齐规则。 - 数组的大小是其元素大小与元素数量的乘积。
void *
(通用指针)的大小与系统的指针大小相同,在32位系统上通常是4字节,在64位系统上通常是8字节。size_t
和ptrdiff_t
等类型的大小取决于系统和编译器,用于表示对象的大小和指针差异。
如何检查
你可以使用sizeof
运算符来检查特定类型或变量在特定编译器和平台上的大小。例如:
#include <stdio.h>
int main() {
printf("Size of char: %zu bytes\n", sizeof(char));
printf("Size of int: %zu bytes\n", sizeof(int));
printf("Size of long: %zu bytes\n", sizeof(long));
printf("Size of float: %zu bytes\n", sizeof(float));
printf("Size of double: %zu bytes\n", sizeof(double));
// ... 检查其他类型 ...
return 0;
}