目录
- 结构是一些值的集合,这些值称为成员变量;
- 结构的每个成员可以是不同类型得变量;
基本格式:
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;
- }
使用大括号进行初始化:
- 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;
- }
相比第一种传结构体,传结构体的地址其实更好一些,这是因为:
函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。并且,传地址效率高,方便修改,也不用再拷贝数据,所以首选传结构体的地址。
本篇到此结束 ,码文不易,还请多多支持哦~