结构体
(相关资料图)
结构体
头文件
#include#include
声明结构体
//声明一个学生类型,是想过学生类型来创建学生变量//描述学生:属性-名字+电话+性别+年龄struct Stu{ char name[20]; char tele[12]; char sex[20]; int age;}s4,s5,s6;struct Stu s3;//全局变量int main(){ //创建的结构体变量 struct Stu s1; struct Stu s2; return 0;}
匿名结构体类型
struct{ int a; char c;}sa;struct{ int a; char c;}*psa;int main(){ psa=&sa;//非法的 return 0;}
结构体的自引用
struct Node{ int date; struct Node* next;};int main(){ return 0;}typedef struct Node{ int date;//4 struct Node* next;//4/8}Node;int main(){ struct Node n1; Node n2; return 0;}
结构体的初始化
struct T{ double weight; short age;};struct S{ char c; struct T st; int a; double d; char arr[20];};int main(){ struct S s = {"c",{55.6,30},100,3.14,"hello bit"}; printf("%c %lf %d %d %lf %s\n",s.c,s.st.weight,s.st.age,s.a,s.d,s.arr); return 0;}
结构体内存对齐
struct S1{ char c1; int a; char c2;};struct S2{ char c1; char c2; int a;};struct S3{ double d; char c; int i;};struct S4{ char c1; struct S3 s3; double d;};int main(){ struct S1 s1 = {0}; printf("%d\n",sizeof(s1)); struct S2 s2 = {0}; printf("%d\n",sizeof(s2)); struct S3 s3 = {0}; printf("%d\n",sizeof(s3)); struct S4 s4 = {0}; printf("%d\n",sizeof(s4)); return 0;}#pragma pack(4) //设置默认对齐数为4struct S{ char c1; double d;};#pragma pack() //取消默认对齐数int main(){ struct S s; printf("%d\n",sizeof(s)); return 0;}
写一个宏,计算结构体中某变量相对于首地址的偏移 offsetof()宏的实现、
struct S{ char c; int i; double d; };int main(){ //offsetof(); printf("%d\n",offsetof(struct S,c)); printf("%d\n",offsetof(struct S,i)); printf("%d\n",offsetof(struct S,d)); return 0;}
结构体传参
struct S{ int a; char c; double d;};void Init(struct S* ps){ ps->a = 100; ps->c = "w"; ps->d = 3.14;}//传值Print1(struct S tmp){ printf("%d %c %lf\n",tmp.a,tmp.c,tmp.d);}//传址(推荐)Print2(const struct S* ps){ printf("%d %c %lf\n",ps->a,ps->c,ps->d);}int main(){ struct S s = {0}; Init(&s); Print1(s); Print2(&s); /*s.a = 100; s.c = "w"; s.d = 3.14; printf("%d\n",s.a);*/ return 0;}
位段 - 二进制位 为了节省空间
struct S{ int a:2; int b:5; int c:10; int d:30; //后面数字不能大于32};//47bit - 6个字节*8 = 48bitint main(){ struct S s; printf("%d\n",sizeof(s));//8个字节 return 0;}
位段的内存分配
struct S{ char a:3; char b:4; char c:5; char d:4;};int main(){ struct S s={0}; s.a = 10; s.b = 20; s.c = 3; s.d = 4; return 0;}
关键词:
责任编辑:宋璟
-
结构体
-
我们只需在一棵树下相见
-
8月4日 13:05分 科翔股份(300903)股价快速拉升
-
2023湖南株洲市炎陵县霞阳镇招聘城市社区专职工作者拟聘人员名单公示
-
海东互助:薯香时节共话产业特色
-
8月4日 10:45分 凡拓数创(301313)股价快速拉升
-
古偶市场又热了,但老玩家欢瑞世纪却不灵了
-
特斯拉上海超级工厂7月交付超6.4万辆电动车,同比增长128%
-
英伟达挖到一位最高等级华人高管
-
Chinajoy惊现清华系大模型公司,「超拟人大模型」驱动AI互动游戏
-
传特斯拉高管会见印度商务部长 商谈在印建厂计划
-
佛山顺德陈村挂牌一宗学校南侧地块 起价17.06亿元
-
19调28调37调是什么意思(28 37 19调是什么意思)
-
华为Mate 50E在哪里拍证件照
-
奥迪a4是不是带t的(奥迪a4是b级车吗?)
-
天猫国际“新世界工厂”首次落地西南
-
上半年我国机器人产业总体保持稳定增长态势
-
万科A7月实现合同销售金额220.5亿元
-
随着能源收入回升 俄罗斯有望重启外汇和黄金购买
-
造梦西游3烈马(造梦西游3御马间在哪)
-
男子回应救灾现场搭灶做烩面:昨天做了13锅,够800多人吃
-
证券时报e公司讯,重庆银行(601963)8月3日晚间公告,本行董事会近日收到冉海陵提交的辞任函
-
乘联会:预估7月新能源乘用车厂商批发销量75万辆,同比增长34%
-
安琪酵母股份有限公司副总经理杨子忠辞职
-
任天堂新财报 《塞尔达:王国之泪》销量达1851万
-
落地请开手机全集完整版(落地请开机的结局是什么)
-
2023云南昆明市中级人民法院招聘公告(10人)
-
恒瑞医药:公司严守合规底线 日常经营管理和业务状况一切正常
-
厚植生态底蕴 中国药谷双向发力 优化营商环境
-
水壶里有内裤?亚朵酒店称网民故意而为,警方已介入
-
2023年安徽体育类第二批高职(专科)控制线
-
通信工程培训资料(通信工程培训)
-
“变身”宇航员、学习“建”地铁……四川这些留守儿童参加夏令营充实过暑假
-
监管趋严!年内经纪业务罚单增至63张,知名券商一日领了6张
-
新天绿能(600956):8月2日北向资金减持14.06万股