C语言结构体struct详解

2023-02-05 11:19:34

目录

一、struct的概念

1、类比:

2、含义详解:

二、结构体变量的定义

1、创建结构体类型的时候定义

2、具体使用的时候定义

三、如何得到结构体成员?

1、通过 . 点操作符得到结构体成员

2、运用指针通过箭头 -> 得到结构体成员

四、结构体的自引用注意事项

1、错误用法(无限套娃)

2、正确用法

五、结构体传参

1、传值

2、传地址


一、struct的概念

1、类比:

数组里存放的是相同元素的集合,而结构体存放的可以是不同元素的集合。

例如描述一个学生:

struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}; //分号不能丢

2、含义详解:

                   struct--定义结构体       

                  Stu--结构体标签(方便了解结构体成员类型,在这里就是学生的相关信息)

                  struct Stu:结构体类型

二、结构体变量的定义

(使用:类型+变量名(类似于int a,char b))

1、创建结构体类型的时候定义

struct Stu
{
char name[20];
int age;
char sex[5];
char id[20];
//创建的时候定义变量
}s1,s2,s3; 


//直接使用
s1={…………};
s2={…………};

2、具体使用的时候定义

struct Stu s = { "张三",18,"男","123456" };//成员之间用 , 隔开

三、如何得到结构体成员?

1、通过 . 点操作符得到结构体成员

printf("%s %d %s %s", s.name, s.age, s.sex, s.id);

2、运用指针通过箭头 -> 得到结构体成员

struct Stu s = { "张三",18,"男","123456" };
    //创建结构体指针
	struct Stu* p = &s;
	printf("%s %d %s %s\n", p->name, p->age, p->sex, p->id);

四、结构体的自引用注意事项

1、错误用法(无限套娃)

//错误用法
struct S
{
int data;
struct S next;
};

2、正确用法

struct S
{
int data;
//指针
struct S* next;
};

五、结构体传参

结构体传参可以传值,也可以传地址。

1、传值

void Print(struct Stu s)
{	
	printf("%s %d %s %s", s.name, s.age, s.sex, s.id); 

}
int main()
{	
	struct Stu s = { "张三",18,"男","123456" };
    //传值
	Print(s);

2、传地址

void Print(const struct Stu* p)//const 修饰*p,*p的值不可以改变,Print函数只负责打印
{	
	printf("%s %d %s %s\n", p->name, p->age, p->sex, p->id);

}
int main()
{	
	struct Stu s = { "张三",18,"男","123456" };
    //传地址
	Print(&s);

不过总的来说,还是建议传地址,因为地址大小是固定的4/8字节(32位平台/64位平台),而且通过地址我们可以在函数内部改变结构体成员变量的值,权限更多一些。


 

  • 作者:T_Amarantos
  • 原文链接:https://blog.csdn.net/cuoguodeshiyihan/article/details/126463926
    更新时间:2023-02-05 11:19:34