多语言展示
当前在线:615今日阅读:126今日分享:42

C语言中结构体计算大小的规则

C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。你可以认为结构体是一种聚合类型。在实际开发中,我们可以将一组类型不同的、但是用来描述同一件事物的变量放到结构体中。例如,在校学生有姓名、年龄、身高、成绩等属性,学了结构体后,我们就不需要再定义多个变量了,将它们都放到结构体中即可。
工具/原料
1

笔记本电脑

2

运行系统windows10

3

编程软件哈啊c

方法/步骤
1

printf('char:%d\n',sizeof(char));    printf('float:%d\n',sizeof(float));    printf('int:%d\n',sizeof(int));    printf('double:%d\n',sizeof(double));//打印出各类型变量的大小

2

printf('s1:%d\n',sizeof(struct s1));    printf('s2:%d\n',sizeof(struct s2));    printf('s3:%d\n',sizeof(struct s3));    printf('s4:%d\n',sizeof(struct s4));    printf('s5:%d\n',sizeof(struct s5));    printf('s6:%d\n',sizeof(struct s6));    printf('s7:%d\n',sizeof(struct s7));//打印出各个结构体的大小

3

struct s1{    char ch1;//1    char ch2;//1    int i;//4};//结构体花括号后面要记得加;

4

struct s2{    char ch1;//1    int i;//4    char ch2;//1};

5

struct s3{    char ch;//1    int i;//4    char str[10];//10};

6

struct s4{    char ch;//1    int i;//4    struct s{//8        char ch1;//1        int j;//4    }stmp;//结构体只是一个声明,不占空间    float f;//4};

7

struct s5{    char ch;    int i;    union{         //联合结构体,只按照里面最大的来算        char ch1;        int j;    };};

8

//#pragma pack(4)//指定向4,最大是8,如有超出指定范围,就按照指定范围的来计算 struct s6{    char ch;//1    int i;//4    float f;//4    double d;//8    }; #pragma pack(10)//如没有超出指定范围,就按照最大的来计算struct s7{    char ch;    int i;    float f;    double d;    };

9

运行程序,结构体的对齐方式很浪费空间,可是按照计算机的访问规则,效率提高了。

注意事项
1

1.结构体成员的偏移必须是成员大小的整数倍(0被认为是任何数的整数倍)

2

2.结构体大小必须是成员(数组,结构体除外)大小的整数倍

3

3.本程序采用哈啊c编写,由于软件本身有bug,在重新编译运行时,要先把之前的运行窗口先关掉,不然会报错。

推荐信息