C语言中不同变量类型长度

C语言数据长度记录

数据类型 16位编译器(字节) 32位编译器(字节) 64位编译器(字节)
char 1 1 1
int 2 4 4
short int 2 2 2
float 4 4 4
double 8 8 8
long 4 4 8
long long 8 8 8
指针 2 4 8

int,long,char前面可以加unsigned,表示该变量为无符号的,最高位用来表示数据而不是符号,不影响变量长度。
指针作用是寻址,所以受到编译器影响,比如32位编译器的内存最高位2^32位,也就是四个字节,所以指针长度也是四个字节,16位或64位编译器中的指针长度也是如此计算。

结构体长度除了由结构体成员变量决定,也受到字节对齐影响,在64位编译器,四字节对齐的情况下

typedef struct{
    char  a;
    int   d;
    char  c[3];
}Test_struct;

Test_struct中char占一个1个字节,int占4个字节,成员变量的长度为8个字节,但在4字节对齐的情况下,char占用了一个字节,剩下的三个字节并不足够int使用,所以int使用了下一个四字节的空间,然后c[3]使用了3个字节,sizeof(Test_struct)返回值位12,浪费了三个字节的空间。
但是,如果修改变量定义顺序

typedef struct{
    char  a;
    char  c[3];
    int   d;
}Test_struct;

这个时候sizeof(Test_struct)返回值为8。

你可能感兴趣的:(c语言,开发语言)