C语言的struct与union怎么使用
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本文小编为大家详细介绍"C语言的struct与union怎么使用",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言的struct与union怎么使用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
摩尔互联网科技诈骗
蛟河手机软件开发
现代网络安全有什么用
网络安全和微软认证有用吗
怎样ping外网服务器
电脑服务器回收价
服务器驱动精灵安装
网络安全法不履行三十二
网络安全专家的发展
学校网络技术部是干嘛的
网络安全实验 哈工程
词语数据库庞大
怎么设置自家网络安全
《软件开发技术基础》
计算机网络技术.
苹果游戏中心服务器无法连接
衡阳信息网络技术学校好不好
综合布线管理系统软件开发
河北web前端软件开发多少钱
一个数据库的设计与实现实验报告
古剑奇谭ol官方服务器
我的世界钻石商店服务器推荐
网络安全综合防控体系机制
传播病毒是网络安全吗
合阳天气预报软件开发
我玩的时服务器地址
手机上删除的数据库
pda开发数据库用哪个
计算机网络技术找工作好找吗
软件开发是流水线么