文章目录
一、结构体的声明
结构体的每个成员可以是不同类型的变量
- 结构成员的类型:标量/数组/指针/其他结构体
- 结构体变量的定义和初始化
c
// 声明结构体类型的同时定义变量p1,p1是全局变量
struct Point
{
int x;
int y;
} p1; // 注意 ; 不要忘记了
struct Node
{
int data;
struct Point p;
struct Node *next; // 一个struct Node类型的指针变量,变量名叫next
};
int main()
{
struct Point p2; // 定义结构体变量p2,此时p2是局部变量,作用范围是main()函数
struct Point p3 = {20, 18}; // 初始化
struct Node n = {20, {12, 15}, NULL};
return 0;
}
二、结构体成员的访问&结构体传参
- 结构体对象.成员变量
- 结构体指针 ->成员变量
- 嵌套结构体:外层是指针,内层是变量 ptr -> obj.member
- 嵌套结构体:外层是指针,内层也是指针ptr -> ptr2 -> member
- 结构体传参时要传结构体的地址,这样可以避免当结构体过大,参数压栈的的系统开销比较大,导致性能的下降
c
struct Point
{
int x;
int y;
};
struct Node
{
int data;
struct Point p;
struct Node *next; // 一个struct Node类型的指针变量,变量名叫next
};
// 结构体对象.成员变量
void print1(struct Node n)
{
printf("%d %d %d %p\n", n.data, n.p.x, n.p.y, n.next);
}
// 结构体指针 ->成员变量
void print2(struct Node *pn)
{
// 注意这里的pn->p.x, pn->p.y写法
// 嵌套结构体:外层pn是指针,内层p是变量
// 结构体指针找成员变量用->
// 结构体变量找成员变量用.
printf("%d %d %d %p\n", pn->data, pn->p.x, pn->p.y, pn->next);
}
int main()
{
struct Node n = {20, {12, 15}, NULL};
print1(n);//传结构体
print2(&n);//传地址
return 0;
}