第一句子大全,网罗天下好句子,好文章尽在本站!

C语言中的union语法有什么用 它能为代码带来什么好处?

时间:2010-03-24

事实上,在实际的C语言项目开发中,为了代码的简洁性,描述问题时很难离开结构体

友情提示:本文共有 1383 个字,阅读大概需要 3 分钟。

C语言中的结构体语法是非常重要,也是非常有用的,相信看了最近几节的读者应该明白。事实上,在实际的C语言项目开发中,为了代码的简洁性,描述问题时很难离开结构体。

“相同信息”的困扰

例如上一节,用于描述视频信息时,可如下定义结构体:

这样一来,在C语言代码中只需一个结构体变量就可用于描述视频的名称、地址、时间等信息,而无需定义多个变量,整个代码就显得非常简洁了。更为方便的是,如果今后需要增加对视频的描述,也仅需对 video_info 新增一个成员而已,例如:

有视频的地方常常也会有音频,所以我们的C语言程序还需要描述音频信息。音频信息也包括名称、地址、时间等信息,不过它也有与视频不同的参数,例如采样率,通道数。所以使用C语言描述音频信息,可以使用下面这个结构体:

这样一来,C语言程序描述视频和音频就简单了,只要使用 video_info 和 audio_info 结构体就可以了:

不过,细心的读者应该能够注意到 video_info 和 audio_info 仅个别成员不同,所以似乎可以这样:

上述C语言代码将视频和音频的描述结构体合二为一,以后需要描述视频和音频时,都使用 av_info 结构体:

不过,这样虽然将 video_info 和 audio_info 的重复代码合并了,但是却也导致代码的耦合性增强:用于描述视频的 vinfo 也能访问音频才有的 chnnl_cnt,用于描述音频的 ainfo 也能访问视频的 alg。

当然,程序员可以在写C语言代码时限制 vinfo 访问音频成员,限制 ainfo 访问视频成员,但是这样也会带来内存的浪费:使用 vinfo 时,音频成员占用的内存被浪费,使用 ainfo 时,视频成员占用的内存被浪费。

union 语法大显身手

可能有读者认为,视音频共用合并后的 av_info 结构体浪费的内存很小,可以不做考虑。但是应该明白,C语言程序常用语资源比较紧张的嵌入式设备中,因此合格的C语言程序员应该都是“抠门”的,尽可能的节约资源。

那这种情况下,C语言有没有办法,既能避免重复代码,又能避免耦合,同时还能节约资源呢?自然是有的,C语言中的 union 语法就是为此而设计的:

因为视音频都有名称、地址、大小信息,所以 av_info 中的 name,address,size 成员在描述视频和音频时都会被使用。视音频具有差异的几个成员则使用 union 描述,union 中的 video 和 audio 共用一块内存区域。

此时访问视频的编码算法和时间信息,可以如下实现:

访问音频的采样率和通道数,可以如下实现:

sr = av.audio.sample_rate;cc = av.audio.chnnl_cnt;从上面这几行C语言代码可以看出,此时视音频的相同成员公用,差异成员则通过 union 区分,这就避免了代码重复,也避免了代码耦合。另外,由于union 中的 video 和 audio 共用一块内存空间,内存浪费的问题也解决了。

小结

本节主要讨论了C语言中 union 语法的使用。容易看出,合理的使用 union 语法,可以解决结构体难以解决的问题。

欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

本文如果对你有帮助,请点赞收藏《C语言中的union语法有什么用 它能为代码带来什么好处?》,同时在此感谢原作者。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
英语最简单的填空做不对 别担心 学长为你带来大佬干货!

英语最简单的填空做不对 别担心 学长为你带来大佬干货!

...,很少有人通过语法知道意思。我明白英语段落的大意,语言专家做了测试,非常有意思,英语好一点的学生和英语差的学生在读同样的英语文章,正在学习的学生集中在文章中的重要词汇上,不擅长学习的学生不仅关注重要的...

2022-12-17 #经典句子

大脑结构:孩子外语真是越早学越好?“语言习得机制”先了解一下

大脑结构:孩子外语真是越早学越好?“语言习得机制”先了解一下

...开始早早的给孩子做打算,想让孩子从小开始就接触两门语言,以免错过了孩子的最佳语言辅导时期,导致孩子落后于大部队。西西的妈妈就十分提倡让孩子从现在开始就学习外语,但是西西的爸爸却有些反对,他认为孩子才不...

2023-09-18 #经典句子

什么是泛读 能给英语学习带来什么好处?

什么是泛读 能给英语学习带来什么好处?

...激发自信来激励学习者。不用说,这有助于他们发展整体语言技能。研究证明,广泛的阅读可以提高阅读速度,阅读理解,听力,口语技能以及词汇和语法。(英国学乐英语分级读物根据动画电影改编)如果您在课堂上大量阅读的...

2011-11-01 #经典句子

英语“成绩差”的学生 基本都有这四个特征 学生:我真的努力了

英语“成绩差”的学生 基本都有这四个特征 学生:我真的努力了

...学生,具备这四个特征词汇量过少,词汇是基本内容作为语言类的学科,记忆的内容自然不会少。如同语文的学习一样,需要积累大量的词汇。词、句、段都是逐步增加的过程,单词的储备量充足,才能保证英语文段的学习。首...

2016-04-23 #经典句子

教孩子写游戏:快速入门C++语言 理解这12个概念 1天时间够了

教孩子写游戏:快速入门C++语言 理解这12个概念 1天时间够了

“学”的部分:一个没有基础的人,要完整地学会C++语言,可能需要一年往上的时间,而且还不一定能学明白。我以为,这个问题出在教材上,写得太过于晦涩难懂了,而且把很多特别不常用的内容添加了进去,这会导致很多想...

2023-02-01 #经典句子

陆俭明|为确保当代中文走向世界必须做好的四件事

陆俭明|为确保当代中文走向世界必须做好的四件事

...与发展、构建人类命运共同体。构建人类命运共同体需要语言铺路搭桥。随着中国经济、科技和国力的不断发展与强盛,随着中国国际地位的不断提升,如今世界比任何时候都需要中文。这给中文走向世界带来了绝好的发展机遇...

2023-02-02 #经典句子

孩子三岁前学方言可能比学英语更合适!

孩子三岁前学方言可能比学英语更合适!

...们可以随意切换,特别聪明!在动妈查看一些关于婴幼儿语言能力与方言方面相关研究内容后,发现孩子学习方言,其实很有好处。孩子学习方言的好处:提高孩子认知能力和语言能力英国和塞浦路斯一项联合研究显示:能说两...

2023-11-01 #经典句子

日语小白如何入门?实用日语学习软件推荐~~亲身经验。

日语小白如何入门?实用日语学习软件推荐~~亲身经验。

...很多宝宝是不是和我一样,真的很不喜欢通过教科书学习语言!学校普遍的学习英语的三件套:背单词+学语法+刷题。有木有?!反正这种教科书式的学习方法我真的觉得很枯燥呀!那我是怎么做的呢?第一、磨耳朵。就是所谓...

2010-04-11 #经典句子