七.结构体
admin
2024-02-09 05:59:26
0

目录

一.结构体的定义

1.结构的基础知识

2.结构的声明

3.结构体变量的定义和初始化

二.结构体成员的访问

三.结构体的传参


一.结构体的定义

1.结构的基础知识

  • 结构是一些值的集合,这些值称为成员变量;
  • 结构的每个成员可以是不同类型得变量;

2.结构的声明

基本格式:

struct tag          //结构体关键字

{

     member - list; //成员变量
}variable - list; //全局的结构体变量

 注意:

  • 成员变量之间用分号隔开,全局变量之间用逗号隔开;
  • 结构体末大括号后必须加上分号(即使不写全局变量也要加上);

例,使用结构体描述一本书,需要:书名,书的价格,作者和国家。

//struct - 结构体关键字  
//Book - 结构体标签 
//struct Book - 结构体类型 
struct Book {/* 成员变量 */char name[20]; // 定义一个结构体类型int price;  char country[10];  char author[20];
} s1, s2, s3; // s1,s2,s3 是三个全局的结构体变量int main()
{struct Book s; // 创建结构体变量return 0;
}

 用typedef进行定义:

typedef struct Book {char name[20];int price;char auther[10];    char country[20];
} Book;int main()
{Book s1; // 前面加typedef之后可以作为一个单独的类型来使用struct Book s2;// 不影响return 0;
}

3.结构体变量的定义和初始化

使用大括号进行初始化:

typedef struct Book {/* 成员变量 */char name[20]; // 定义一个结构体类型int price;  char country[10];  char author[20];
} Book;int main()
{Book s0 = {}; // 使用大括号初始化Book s1 = {"CSDN", 20, "CHINA", "CSDN"};Book s2 = {"活着", 30, "中国", "余华"};return 0;
}

二.结构体成员的访问

通过点操作符(.)进行访问,例:

struct Book {/* 成员变量 */char name[20]; // 定义一个结构体类型int price;  char country[10];  char author[20];
} s1, s2, s3; // s1,s2,s3 是三个全局的结构体变量int main()
{struct Book s={"活着“,30,"中国","余华"};printf("%s %d",s.name,s.price);    //.操作符进行访问
}

 打印结果为:余华 30

三.结构体的传参

传参有两种形式:

  • 传结构体(使用结构体接收);
  • 传地址(使用结构体指针接收);

1.结构体传参

typedef struct Book {char name[20];int price;   char country[10];char auther[20];
} Book;void print_by_s(Book tmp) //结构体为临时变量
{printf("书名: %s\n", tmp.name);printf("价格: %d\n", tmp.price);printf("国家: %s\n", tmp.country);printf("作者: %s\n", tmp.auther);
}int main()
{Book s1 = {"活着", 30, "中国", "余华"}; // 使用大括号初始化/* 打印结构体数据 */print_by_s ( s1 ) ; // 传结构体return 0;
}

2.结构体指针传参

typedef struct Book {char name[20];int price;   char country[10];char auther[20];
} Book;void print_by_s(Book *tmp) //结构体指针
{printf("书名: %s\n", tmp.name);printf("价格: %d\n", tmp.price);printf("国家: %s\n", tmp.country);printf("作者: %s\n", tmp.auther);
}int main()
{Book s1 = {"活着", 30, "中国", "余华"}; // 使用大括号初始化/* 打印结构体数据 */print_by_s ( &s1 ) ; // 传结构体的地址return 0;
}

相比第一种传结构体,传结构体的地址其实更好一些,这是因为:

函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。 并且,传地址效率高,方便修改,也不用再拷贝数据,所以首选传结构体的地址。

本篇到此结束 ,码文不易,还请多多支持哦~

相关内容

热门资讯

深化全球绿色能源合作!上海电气... 来源:上海电气 5月8日,上海电气以“筑梦山海,慧见未来”为主题,在上海成功举办输配电国际化主题活动...
医疗健康领域投融资日报(5月8... 据亿欧数据统计,昨日(2026年5月8日)共披露29起投融资事件,涉及24家国内企业,5家国外企业,...
公募基金首次集体披露上市公司治... 进入5月,公募基金首次集体披露上市公司治理投票结果的“治理首秀”迎来收官。 根据第三方机构最新统计数...
原创 2... 2026年第一季度,全国二手车市场交出了一份令人瞩目的成绩单。据最新的数据显示,今年1至3月全国二手...
榴莲价格为何更“亲民”了? 当市场壁垒被一层层打破,当物流效率一天天提速,当每一个小农户、小商贩都能以更低的成本对接全国大市场,...
原创 三... 近年来,中国居民的储蓄热情可谓日益高涨,一股股存款热潮迭起。究其原因,人们之所以钟情于将钱存入银行,...
“精神病院炒股,炒成上市公司前... 5月8日,江西上饶广丰区十五岭山精神病医院有限公司发布情况说明—— 5月8日,网传我院“新晋升为某上...
“史上最严”医药代表新规落地,... 图片来源:界面图库 界面新闻记者 |李科文 界面新闻编辑 |谢欣 5月7日晚间,国家药监局会...
原创 贸... 卢拉的专机刚落地华盛顿,巴西政府随即释放出一个很清晰的政策信号:从5月11日起,对持普通护照的中国公...
A股“芯”光乍现:涨幅之外,谁... 记者 欧阳晓红 “教堂里的人增加了,但赌场比教堂更拥挤。” 2026年5月2日,95岁的沃伦·巴菲特...
余额宝收益率为何跌破“1”? 文/冉学东 天弘余额宝货币基金的7日年化收益率已跌破0.9%,5月7日的最新数据显示为0.89%,万...
年销135亿元、日均客流20万... 活动市集 5月8日,2026年“时尚生活 魅力长宁”第七届长宁区五五购物节在金虹桥商场启幕,现场发布...
不良率上升倒逼防线前移 银行收... 银行正在给个人信贷风控“上强度”。上海证券报记者近期自业内多方了解到,不少银行零售信贷业务从审批权限...
自媒体新手如何快速涨粉?这5个... 自媒体新手如何快速涨粉?这5个技巧让你少走弯路! 嗨,我是小融。 最近很多刚入门自媒体的朋友问我,怎...
乌兰察布市财政局关于黄金领域非... 乌兰察布市财政局关于黄金领域 非法金融活动风险提示 近期,黄金价格波动频繁,市场热度持续攀升,各类假...
一只鸡蛋架“直发”俄罗斯 无锡... (来源:无锡新传媒) 转自:无锡新传媒 一只3D打印塑料鸡蛋架,成为无锡国际邮件互换局正式开通运营后...
武汉楼市开启红五月 新房成交量... 原标题:武汉楼市开启红五月 数据爆表,新房成交量较去年同期翻番 武汉城建未来中心项目营销中心现场来...
一家精神病院竟现身A股公司前十... 5月8日,有投资者发现,盛通股份前十大股东名单中,竟出现了一家精神病院的身影。这家精神病院全称为“上...
真的老了!哈登心魔难除 骑士还... 哈登又拉胯了。 刚刚过去的两场东部半决赛,骑士都输的相当狼狈,而哈登的发挥更是灾难级的。 半决赛G1...
精神病院通报成上市公司前十大股... 近日,上市公司盛通股份发布一季报,披露了前十大股东名单。其中,一家名为“上饶市广丰区十五岭山精神病医...