C语言常用类型 字节数大小

C语言 常用类型 字节数大小

基本类型

有符号无符号32位64位
[signed] charunsigned char11
shortunsigned short22
intunsigned int44
longunsigned long48
long longunsigned long long88
int32_tuint32_t44
int64_tuint64_t88
void*48
float44
double88

其他都是一样的,主要区别在long​与void*​,32位系统和64位系统存在差异。

其他类型

数组和字符串

int array[] 字节数 = 基本类型的字节数 × 数组个数

char str[] 字节数 = char​类型的字节数(即1个字节) × 字符个数 + 1(\0​)

字符串类型计算字节数时需要加上末尾不显示的\0​。

结构体与联合体
联合体(union)

union的长度由最大长度的成员与类型长度最大的成员共同决定,其长度是类型长度最大的成员长度的整数倍。

union G
{
    char  name[30];
    double al;
    char sex;
    int age;
    float height;
};

联合体G需要占用空间最大的是元素char name[30]​,为30个字节,但是类型中占用空间最大的是double类型,为8个字节。所以联合体G需要是既是double类型的整数倍,也要大于等于30,因此sizeof(G)=32。

结构体(struct)

字节对齐的细节和具体编译器实现相关,但一般而言,满足三个准则:

  1. 结构体变量的首地址能够被其长度最大基本类型成员的大小所整除;
  2. 结构体每个成员相对于结构体首地址的偏移量都是当前成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;
  3. 结构体的总大小为结构体长度最大基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。
typedef union {
    long i;
    int k[5];
    char c;
} DATE;
struct data {
    int cat;
    DATE cow;
    double dog;
} ;

以32位系统为例,首先,联合体union中,最大的元素是int[5]​占用5×4=20个字节。联合体中类型长度最大的成员大小为4个字节,20字节符合类型长度最大的成员的整数倍,因此,union的大小为20个字节。

结构体中,长度最大的基本类型成员为double​类型,因此需要按8字节进行对齐。int cat​加上DATE cow​的字节数正好是24,不用进行补位对齐,所以,结构体的大小为32字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值