文章目录
第七章结构体
1.结构体类型的声明
2.结构体初始化
3.结构体成员访问
4.结构体传参
1.结构体的声明
1.1结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
1.2结构的声明
typedef struct Stu
{
char name[20];
char sex[8];
int age;
char id[10];
}Stu;
1.3结构成员的类型
类型可以是标量、数组、指针,甚至是其他结构体。
1.4结构体变量的定义和初始化
如何定义和初始化变量:
struct Stu
{
char name[20]; //局部变量
char sex[5];
int age;
char id[10];
}s; //全局变量
struct Stu s1; //定义结构体变量s1
struct Stu s2 = { "小明","男","20","aw11140551" }; //初始化
struct Point
{
int x;
int y;
};
struct Node
{
int data;
struct Point p;
struct Node* nx;
}n1 = { 1,{6,7}, NULL}; //结构体嵌套初始化
struct Node n2 = { 2,{9,10},NULL }; //结构体嵌套初始化
2.结构体成员的访问
2.1结构体变量访问成员
通过点操作符(.)访问的。点操作符接受两个操作数。
#include <stdio.h>
struct Stu
{
char name[20];
int age;
char id[10];
};
int main()
{
struct Stu s = { "小明",18,"ad1254656" };
printf("%s %d %s",s.name,s.age,s.id);
return 0;
}
2.2结构体指针访问指向变量的成员
有时候得到的不是一个结构体变量,而是指向一个结构体的指针。
#include <stdio.h>
struct Stu
{
char name[20];
int age;
char id[10];
};
void print(struct Stu* pa)
{
printf("%s %d %s\n",pa->name,pa->age,pa->id);
printf("%s %d %s\n", (*pa).name,(*pa).age,(*pa).id);
}
int main()
{
struct Stu s = { "小明",18,"ad1254656" };
print(&s);
return 0;
}
3.结构体传参
#include <stdio.h>
struct Stu
{
char name[20];
int age;
char id[10];
};
void print1(struct Stu s)
{
printf("%s &d %s\n", s.name,s.age,s.id);
}
void print2(struct Stu* pa)
{
printf("%s %d %s\n",pa->name,pa->age,pa->id);
printf("%s %d %s\n", (*pa).name,(*pa).age,(*pa).id);
}
int main()
{
struct Stu s = { "小明",18,"ad1254656" };
print1(s); //传结构体
print2(&s); //传地址
return 0;
}
上面的代码中有两个print函数,首选print2函数。
原因:
函数传参的时候,参数需要压栈。
如果传递一个结构体对象时,结构体过大的话,参数压栈的系统开销比较大,会导致性能的下降。
总结:
结构体传参的时候,要传结构体的地址。
上一章:C语言入门学习 — 6.指针
配套练习:
C语言练习题110例(一)
C语言练习题110例(二)
C语言练习题110例(三)
C语言练习题110例(四)
C语言练习题110例(五)
C语言练习题110例(六)
C语言练习题110例(七)
C语言练习题110例(八)
C语言练习题110例(九)
C语言练习题110例(十)
C语言练习题110例(十一)