> 文章列表 > 【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)

【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)

【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)

简单不先于复杂,而是在复杂之后。

89efcc89ac61428db4d5b6639b2bd948.jpeg 

 

目录

1. 结构体的声明 

1.1 结构体的基础知识

1.2 结构的声明 

1.3 结构成员的类型 

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

2. 结构体成员的访问 

3. 结构体传参 


 

 

1. 结构体的声明 

1.1 结构体的基础知识

结构是一些值的集合,这些值称为成员变量。

 

结构的每个成员可以是不同类型的变量。 

1.2 结构的声明 

 

 【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)

 【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)

 【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)

 

p1 和 p2 是使用 struct Peo 结构类型创建的两个变量

 

p1 和 p2 是全局变量,但尽量不要使用。

 

【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)

 

struct Peo 是类型,不占内存空间。

 

p1 p2 是结构体变量

1.3 结构成员的类型 

结构的成员可以是变量 、数组、指针、甚至是其他结构体。

 

【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)

 

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

【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参) 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>struct Peo
{char name[20];char tele[12];char sex[5];int high;
}p3, p4;struct Peo p5, p6;struct St
{struct Peo p;int num;float f;
};int main()
{struct Peo p1 = { "张三","123456677","男","181" };//结构体变量的初始化struct St s = { {"李四","1233244","女","166"}, 100,3.14f };return 0;
}

 

2. 结构体成员的访问 

结构体变量访问成员

 

结构体变量的成员是通过点操作符(.)访问的。

 

点操作符接受两个操作数。

 

例如:

 【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)

结构体指针访问指向变量的成员:

 

有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。

 

那么该如何访问成员?

如下:

 【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)

 

struct Peo
{
char name[20];
char tele[12];
char sex[5];
int high;
}p3,p4;struct Peo p5, p6;struct St
{
struct Peo p;
int num;
float f;
};void print2(struct Peo* sp)
{
printf("%s %s %s %d\\n", sp->name, sp->tele, sp->sex, sp->high);//结构体指针->成员变量
}void print1(struct Peo p)
{
printf("%s %s %s %d\\n", p.name, p.tele, p.sex, p.high);}
int main()
{
struct Peo p1 = {"张三","123456677","男","181"};//结构体变量的初始化
struct St s = { {"李四","1233244","女","166"}, 100,3.14f};printf("%s %s %s %d\\n", p1.name, p1.tele, p1.sex, p1.high);//结构体变量.成员变量
printf("%s %s %s %d %d %f\\n", s.p.name,s.p.tele,s.p.sex,s.p.high,s.num,s.f);print1(p1);
print2(&p1);return 0;
}

 

3. 结构体传参 

 【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)

 

函数传参的时候,参数是需要压栈的。

 

如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以导致性能的下降。

 

总结:结构体传参的时候,要传结构体变量的地址。