变量各类型所占的字节数

本文详细解析了C语言中各种类型的指针及数组的使用方法与内存占用情况,包括基本整型变量、指针、双层指针、数组、指向数组的指针以及指向函数的指针等。


a) 一个整型数(An integer) 
b) 一个指向整型数的指针(A pointer to an integer) 
c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer 
to an integer) 
d) 一个有10个整型数的数组(An array of 10 integers) 
e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to 
integers) 
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers) 
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a fu 
nction that takes an integer as an argument and returns an integer) 


a) int a; // An integer 
b) int *b; // A pointer to an integer 
c) int **c; // A pointer to a pointer to an integer 
d) int d[10]; // An array of 10 integers 
e) int *e[10]; // An array of 10 pointers to integers 
f) int (*f)[10]; // A pointer to an array of 10 integers 
g) int (*a)(int); // A pointer to a function a that takes an integer argument 
and returns an integer 


void main()
{
 int a;
 int *b;
 int **c;
 int d[10];
 int *e[10];
 int (*f[10]);
 char *g;
 printf("变量int a       占的字节数:%d\n",sizeof(a)); 4
 printf("变量int *b      占的字节数:%d\n",sizeof(b)); 4
 printf("变量int **c     占的字节数:%d\n",sizeof(c));4
 printf("变量int d[10]   占的字节数:%d\n",sizeof(d));40
 printf("变量int *e[10]  占的字节数:%d\n",sizeof(e));40
 printf("变量int (*f[10])占的字节数:%d\n",sizeof(f));40
 printf("变量int (*f[10])占的字节数:%d\n",sizeof((*f[10])));4
 printf("变量int (*f[10])占的字节数:%d\n",sizeof(*f));4
 printf("变量*g   占的字节数:%d\n",sizeof(g));4
 printf("变量*g   占的字节数:%d\n",sizeof(*g));1 *g是一个字符,所以占一个字节,同理整形变量也一样
}

<think> 我们正在回答用户关于C语言变量类型字节数的问题。根据提供的引用信息,我们可以总结如下: 引用[2]提到:char变量用1字节,并给出了示例代码验证。 引用[3]和引用[4]都提供了常见数据类型字节数,但需要注意不同系统(32位/64位)的差异,尤其是指针和long类型。 总结如下: 1. 基本整数类型: - char / unsigned char: 1字节 - short / unsigned short: 2字节 - int / unsigned int: 4字节(通常在32位和64位系统上都是4字节,但标准允许不同实现) - long / unsigned long: 在32位系统上为4字节,在64位系统上通常为8字节(注意:根据引用[4],指针在32位系统是4字节,64位是8字节,而long类型类似) - long long / unsigned long long: 8字节 2. 浮点类型: - float: 4字节 - double: 8字节 - long double: 12字节(引用[3])或根据实现可能不同(例如,在x86-64系统上通常是16字节) 3. 指针类型:在32位系统上为4字节,64位系统上为8字节(引用[1]和引用[4]) 4. 固定宽度整数类型(引用[4]): - uint8_t: 1字节 - uint16_t: 2字节 - uint32_t: 4字节 - uint64_t: 8字节 注意:C语言标准并没有严格规定每种类型的具体大小,只规定了它们的最小范围。因此,实际大小依赖于编译器和目标平台。我们可以使用sizeof运算符来获取特定平台上类型的大小。 为了验证,我们可以编写一个简单的程序: ```c #include <stdio.h> #include <stdint.h> int main() { printf("char: %zu\n", sizeof(char)); printf("short: %zu\n", sizeof(short)); printf("int: %zu\n", sizeof(int)); printf("long: %zu\n", sizeof(long)); printf("long long: %zu\n", sizeof(long long)); printf("float: %zu\n", sizeof(float)); printf("double: %zu\n", sizeof(double)); printf("long double: %zu\n", sizeof(long double)); printf("pointer: %zu\n", sizeof(int*)); return 0; } ``` 运行上述程序将输出当前平台上各类型的大小。 另外,引用[4]还提到有符号和无符号版本的大小相同,只是表示范围不同。 结论:在常见的32/64位系统中,大部分类型的大小如上所述,但long和指针的大小依赖于系统架构(32位或64位),而long double的大小则因编译器和平台而异。 因此,我们在编程时,尤其是涉及跨平台时,应使用sizeof运算符来获取确切的大小,避免硬编码。 </think> ### C语言常见数据类型字节数总结 根据引用资料[^2][^3][^4],C语言中常见数据类型字节数与系统架构相关(32位/64位)。以下是标准环境下的典型值: #### ✅ 基本数据类型 1. **字符型** - `char` / `unsigned char`:1字节(范围:-128~127 / 0~255) - 输出位符:`%c` 或 `%hhd`(有符号)、`%hhu`(无符号) 2. **整型** | 类型 | 32位系统 | 64位系统 | 输出位符 | |---------------------|----------|----------|------------| | `short` | 2字节 | 2字节 | `%hd` | | `int` | 4字节 | 4字节 | `%d` | | `long` | 4字节 | **8字节**| `%ld` | | `long long` | 8字节 | 8字节 | `%lld` | 3. **浮点型** - `float`:4字节位符:`%f`) - `double`:8字节位符:`%lf`) - `long double`:12字节位符:`%Lf`) 4. **指针类型** - 指针变量(如 `int* ptr`) - 32位系统:4字节 - 64位系统:8字节 - 验证方法:`sizeof(ptr)`[^1] #### ✅ 固定宽度整数类型(`stdint.h`) | 类型 | 字节数 | 范围 | |-------------|--------|----------------| | `uint8_t` | 1 | 0~255 | | `uint16_t` | 2 | 0~65,535 | | `uint32_t` | 4 | 0~4,294,967,295| | `uint64_t` | 8 | 0~$2^{64}-1$ | --- ### ️ 关键注意事项 1. **系统依赖性** - `long` 和指针类型在64位系统中字节数翻倍[^4]。 - 使用 `sizeof` 运算符直接获取当前环境的准确大小(如 `sizeof(long)`)[^2][^1]。 2. **有符号 vs 无符号** - 无符号类型(如 `unsigned int`)与有符号类型字节数相同,仅范围不同[^4]。 3. **示例代码验证** ```c #include <stdio.h> int main() { printf("int: %zu\n", sizeof(int)); // 输出4 printf("指针: %zu\n", sizeof(int*)); // 32位输出4,64位输出8 printf("long: %zu\n", sizeof(long)); // 32位输出4,64位输出8 return 0; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值