目录
一.结构体的定义
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;
}
相比第一种传结构体,传结构体的地址其实更好一些,这是因为:
函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。并且,传地址效率高,方便修改,也不用再拷贝数据,所以首选传结构体的地址。
本篇到此结束 ,码文不易,还请多多支持哦~