Linux C语言 14-自定义变量(结构体)
本节关键字:Linux、C语言、结构体
相关C库函数:sizeof,memcpy、printf
什么是结构体?
大白话,使用一些已有的数据类型组装成一个新的数据类型,这个新的数据类型在某个场景下使用的更加顺手。
结构体定义
格式:
struct 变量名 结构体变量名
{
结构体成员;
};
struct + 变量名 = 数据类型
例如:
struct C_Language_Info
{
char name[10];
int id;
float score;
char sex;
};
结构体的大小
不同的结构体大小不固定,开辟空间的原则是按照结构体元素占用最大空间的整数倍去开辟,同时要兼顾系统地址对齐原则。
- Windows、VS、Qt默认是8字节对齐
- Linux 32位默认是4字节对齐;64位默认8字节对齐
- 指定编译器按照n字节对齐,n最好为2的n次方幂 #pragma pack(n)
结构体数组
格式:数据类型 数组名[数组长度];
例:struct INFOR stu[65];
结构体指针
格式:数据类型 *变量名;
struct INFOR info;
struct INFOR *pInfo = &info;
结构体定义及初始化
#include <stdio.h>
#include <string.h>
struct INFOR
{
char name[64];
int age;
char sex;
float score;
};
int main()
{
// 不初始化,系统产生随机值
struct INFOR info1;
// 定义时初始化
struct INFOR info2 = {"Theshy", 18, 'w', 99.9};
// 拷贝初始化
struct INFOR info3;
memcpy(&info3, &info2, sizeof(info3));
// 结构体指针
struct INFOR *pInfo = &info1;
printf("size: %d\n", sizeof(struct INFOR));
printf("info1: %s, %d, %c, %f\n", info1.name, info1.age, info1.sex, info1.score);
printf("info2: %s, %d, %c, %f\n", info2.name, info2.age, info2.sex, info2.score);
printf("info3: %s, %d, %c, %f\n", info3.name, info3.age, info3.sex, info3.score);
printf("pInfo: %s, %d, %c, %f\n", pInfo->name, pInfo->age, pInfo->sex, pInfo->score);
return(0);
}
/** 运行结果:
size: 76
info1: , 4196048, , 0.000000
info2: Theshy, 18, w, 99.900002
info3: Theshy, 18, w, 99.900002
pInfo: , 4196048, , 0.000000
*/