【来源:茂名市电白区人民政府-部门动态】8月26日,省通信管理局联合市通建办到我区林头镇、观珠镇开展茂名市典型镇圩镇通信线路整治工作调研。意在落实省推...
2025-08-28 0
#include <stdio.h>#include <string.h> union Data{ int i; float f; char str[20];}; int main( ){ union Data data; data.i = 10; data.f = 220.5; strcpy( data.str, "C Programming"); printf( "data.i : %d\n", data.i); printf( "data.f : %f\n", data.f); printf( "data.str : %s\n", data.str); return 0;}
咱们先打个比方:共用体(union)就像一个 "多功能储物盒"—— 盒子只有一个,但可以放不同类型的东西(整数、浮点数、字符串),但每次只能放一种,新东西放进去会把旧的覆盖掉。而栈就像家里的临时置物台,这个盒子用完就收走,不占地方。
这段代码定义了一个Data共用体,里面可以放整数i、浮点数f或字符串str。然后在main里创建了data变量,先存 10,再存 220.5,最后存字符串 "C Programming",然后打印这三个值。运行结果会很奇怪:
plaintext
data.i : 1917853767data.f : 4122360580327794860452759994368.000000data.str : C Programming
整数和浮点数都乱了,只有字符串正常。这不是 bug,而是共用体的特性!今天咱们就从内存角度扒开这个 "多功能盒子" 的秘密。
C 程序内存的三大块里,这段代码只用到了栈:
c
运行
union Data { int i; // 整数(4字节) float f; // 浮点数(4字节) char str[20]; // 字符串(20字节)};
c
运行
int main() { union Data data; // 共用体变量 // ...}
┌─────────────────────────────────────┐│ 字节0 字节1 字节2 ... 字节19 │ ← 共20字节,初始值是栈上的随机垃圾└─────────────────────────────────────┘
c
运行
data.i = 10; // 第一步:存整数10data.f = 220.5; // 第二步:存浮点数220.5(覆盖前面的10)strcpy(data.str, "C Programming"); // 第三步:存字符串(覆盖前面的220.5)
c
运行
printf("data.i : %d\n", data.i); // 读前4字节,按整数解析printf("data.f : %f\n", data.f); // 读前4字节,按浮点数解析printf("data.str : %s\n", data.str); // 读20字节,按字符串解析
c
运行
return 0;
#include <stdio.h>#include <string.h> union Data{ int i; float f; char str[20];}; int main( ){ union Data data; printf( "Memory size occupied by data : %d\n", sizeof(data)); return 0;}
#include <stdio.h>#include <string.h> union Data{ int i; float f; char str[20];}; int main( ){ union Data data; data.i = 10; printf( "data.i : %d\n", data.i); data.f = 220.5; printf( "data.f : %f\n", data.f); strcpy( data.str, "C Programming"); printf( "data.str : %s\n", data.str); return 0;}
通过分析共用体代码的内存分配,揭示共用体成员共享同一块内存(大小由最大成员决定)、新值覆盖旧值的特性,解析打印结果混乱的原因,展现共用体节省内存但需注意类型匹配的特点。
#C 语言共用体 #栈内存 #内存共享 #类型解析 #内存覆盖
相关文章
【来源:茂名市电白区人民政府-部门动态】8月26日,省通信管理局联合市通建办到我区林头镇、观珠镇开展茂名市典型镇圩镇通信线路整治工作调研。意在落实省推...
2025-08-28 0
亲,这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到-人的牌一样。所以很多小伙伴就怀疑这...
2025-08-28 0
8月26日,海尔集团董事局主席、首席执行官周云杰在《海尔兄弟》续集创作发布会上揭晓《海尔兄弟》续集上线时间确定:2027年春节前后。他介绍到:“《海尔...
2025-08-28 0
天眼查APP显示,近日,华熙生物科技股份有限公司申请的“一种重组IV型胶原蛋白及其制备方法和应用”专利公布。 摘要显示,本发明公开了一种重组IV型胶原...
2025-08-28 0
您好:这款游戏是可以开挂的,软件加微信【添加图中微信】确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人...
2025-08-28 0
您好:这款游戏是可以开挂的,软件加微信【添加图中微信】确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人...
2025-08-28 0
湖南日报8月27日讯(全媒体记者 杨斯涵 通讯员 乔楚涵 李波)近日,“第一届全国基因伦理与治理”学术研讨会在湖南师范大学召开。来自北京师范大学、上海...
2025-08-28 0
发表评论