假设有一个结构
struct strt{ float f; char c; int a;}
并以相同的结构代表团结
union unin{ float f; char c; int a;}
如果我将值分配给结构成员,然后打印出来,就可以得到
打印.但是,在联盟的情况下,并不会发生这种情况.
所以我需要找出一种方法,它可以使用union来存储f,c,a的值,然后我可以打印相同的方法. (应用任何 *** 作或任何东西..)但我正在寻找这种技术.任何人在那里可以指导我或给我任何想法?
解决方法 如果你要看一个结构如何存储它的值,那就是这样的:|0---1---2---3---|4---|5---6---7---8---||ffffffffffffffff| | | <- f: Where your float is stored| |cccc| | <- c: Where your char is stored| | |aaaaaaaaaaaaaaaa| <- a: Where your int is stored
所以当你改变f的值时,你实际上是改变0-3的字节.当您更改char时,您实际上正在更改字节4.当您更改int时,您实际上正在更改字节5-8.
如果你现在看一个工会如何存储它的价值观,那就是这样的:
|0---1---2---3---||ffffffffffffffff| <- f: where your float is stored|cccc------------| <- c: where your char is stored|aaaaaaaaaaaaaaaa| <- a: where your int is stored
所以现在,当我改变f的值时,我正在改变字节0-3.由于c存储在字节0中,当你改变f时,你也可以改变c和a!当您更改c时,您正在更改f和a的一部分 – 当您更改a时,您正在更改c和f.这就是你的“覆盖”发生的地方.当您将3个值打包到一个内存地址中时,您根本不会“节省空间”您只是创建3种不同的方式来查看和更改相同的数据.你并没有一个int,一个float和一个char,在物理层面上,你只有32位,可以被视为一个int,一个float或一个char.改变一个是为了改变别人.如果你不希望它们彼此改变,那么使用一个结构体.
这就是为什么gcc告诉你,你的结构体是9个字节长,而你的工会只有4个 – 它不是节省空间 – 只是结构和工会是不一样的.
总结以上是内存溢出为你收集整理的工会与结构在C全部内容,希望文章能够帮你解决工会与结构在C所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)