Linux C语言 14-自定义变量(结构体)

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
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值