C语言的struct与union怎么使用
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,本文小编为大家详细介绍"C语言的struct与union怎么使用",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言的struct与union怎么使用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢
千家信息网最后更新 2025年11月11日C语言的struct与union怎么使用
本文小编为大家详细介绍"C语言的struct与union怎么使用",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言的struct与union怎么使用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
一、struct 的小秘密
C语言中的 struct 可以看作变量的集合
struct 的问题:空结构体占用多大内存?下面编写程序看一下吧:
#includestruct TS{ }; int main(){ struct TS t1; struct TS t2; printf("sizeof(struct TS) = %d\n", sizeof(struct TS)); printf("sizeof(t1) = %d, &t1 = %p\n", sizeof(t1), &t1); printf("sizeof(t2) = %d, &t2 = %p\n", sizeof(t2), &t2); return 0;}
下面为输出结果,可以看到在 gcc 编译器中空结构体的大小就为0。
二、结构体与柔性数组
柔性数组即数组大小待定的数组
C 语言中可以由结构体产生柔性数组
C 语言中结构体的最后一个元素可以是大小未知的数组
思考一下,下面的语句所占内存空间为多少呢,没错,就是 4。
SoftArray 中的 array 仅是一个待使用的标识符,不占用存储空间。
下面看一段柔型数组使用的代码:
#include#include struct SoftArray{ int len; int array[];}; struct SoftArray* create_soft_array(int size){ struct SoftArray* ret = NULL; if(size > 0) { ret = (struct SoftArray*)malloc(sizeof(struct SoftArray) + sizeof(int) * size); ret->len = size; } return ret;} void delete_soft_array(struct SoftArray* sa){ free(sa);} void func(struct SoftArray* sa){ int i = 0; if(NULL != sa) { for(i = 0; i < sa->len; i++) { sa->array[i] = i + 1; } }} int main(){ int i = 0; struct SoftArray* sa = create_soft_array(10); func(sa); for(i = 0; i < sa->len; i++) { printf("%d\n",sa->array[i]); } delete_soft_array(sa); return 0;}
下面为输出结果:
虽然 array[ ] 数组在定义的时候没有指定大小,但是可以在后面使用 malloc 函数来指定大小。柔性数组的好处就是 func() 函数有一个指向柔性数组的合法指针就行,不用传递要处理的数组大小。
三、C语言中的 union
C语言中的 union 在语法上与 struct 相似
union 只分配最大成员的空间,所有成员共享这个空间
如下:
union 的使用受系统大小端的影响
如下,就是定义的字面量常数 i 在大小端的存储位置:

小端模式下地址值存储低位数据,大段模式下低地址存储高位数据。
下面编写程序来判断一下系统的大小端:
#includeint system_mode(){ union SM { int i; char c; }; union SM sm; sm.i = 1; return sm.c;} int main(){ printf("System Mode: %d\n", system_mode()); return 0;}
下面为输出结果:

所以说我的电脑系统是小端
读到这里,这篇"C语言的struct与union怎么使用"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
数组
大小
语言
柔性
结构
空间
存储
就是
文章
系统
结果
输出
内容
函数
成员
数据
模式
程序
端的
处理
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
林口县金石网络技术有限公司
软件开发合同版权转让
软件开发公司的人力资源管理问题
番禺专业的app软件开发
mdt单片机软件开发
数据库第四章数据库安全性
网络安全密钥初始密码是什么
美国认证的网络安全工程师
pc端授课软件开发
监管码服务器能不能安装360
有关美国网络安全的书目
热量星球系统软件开发
昆山网络技术支持
联想服务器鼠标
阿城软件开发招生
高并发数据库死锁
强化网络安全底线思维
金税开票数据库
执法安全合作中心 毒品数据库
网络安全法确定了什么责任
带服务器的路由器
软件测试数据库增删改查
单位网络安全相关工作制度
泽普县网络安全周
小学网络安全主题海报
使用工具在软件开发中
扬州银联软件开发创新服务
单词薄软件开发的答辩PPT
杭州交友软件开发费用是多少
数据库驱动包有什么用