c语言-结构体

目录

  • 前言
  • 一、结构体
    • [1.1 结构体的声明](#1.1 结构体的声明)
    • [1.2 结构体变量的定义](#1.2 结构体变量的定义)
    • [1.3 结构体变量的初始化](#1.3 结构体变量的初始化)
    • [1.4 访问结构体成员变量](#1.4 访问结构体成员变量)
    • [1.5 结构体传参](#1.5 结构体传参)
  • 总结

前言

本篇文章介绍c语言的结构体的声明和定义,以及结构体的基本使用。


一、结构体

结构:结构是指一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。

结构体是用来存储复杂类型的的一种数据类型。

1.1 结构体的声明

结构体的语法结构如下:

c 复制代码
struct 结构体名称{
	数据类型1 成员变量1;
	数据类型2 成员变量2;
	...
};

例如,声明一个存储学生基本信息的结构体类型

c 复制代码
//1.结构体类型的声明
struct Stu {
	char name[20];
	int	 age;
	float height;
	char sex[5];   //一个中文占两个字符
};

当然,结构体的成员变量的类型也可以是结构体类型,例如:

c 复制代码
struct Class   //声明班级信息
{
	char classname[20];
	char classnumber[20];
	struct Stu student[20];  //声明一个结构体数组
};

1.2 结构体变量的定义

结构体变量的定义有两种方式:

  1. 定义结构体局部变量
c 复制代码
//1.结构体类型的声明
struct Stu {
	char name[20];
	int	 age;
	float height;
	char sex[5];   //一个中文占两个字符
};

int main()
{
	struct Stu student;//定义结构体局部变量
	return 0;
}
  1. 定义结构体全局变量
    定义结构体全局变量的方式是在声明结构体时,定义结构体全局变量
c 复制代码
struct Stu {
	char name[20];
	int	 age;
	float height;
	char sex[5];   //一个中文占两个字符
}student1,stuent2,...;  //定义结构体全局变量

此时,结构体变量student1和student2为全局变量

1.3 结构体变量的初始化

结构体变量的初始化一般是在定义时进行初始化,例如

c 复制代码
//1.结构体类型的声明
struct Stu {
	char name[20];
	int	 age;
	float height;
	char sex[5];   //一个中文占两个字符
};

int main()
{
	struct Stu student = {"pys",23,180,"男"};//初始化结构体
	return 0;
}

1.4 访问结构体成员变量

访问结构体成员变量有两种方式

  1. 通过.操作符访问成员变量
c 复制代码
//1.结构体类型的声明
struct Stu {
	char name[20];
	int	 age;
	float height;
	char sex[5];   //一个中文占两个字符
};

int main()
{
	struct Stu student = {"pys",23,180.0f,"男"};
	//访问成员变量
	printf("%s %d %f %s", student.name, student.age, student.height, student.sex);

	return 0;
}
  1. 通过->操作符访问成员变量
c 复制代码
//1.结构体类型的声明
struct Stu {
	char name[20];
	int	 age;
	float height;
	char sex[5];   //一个中文占两个字符
};

int main()
{
	struct Stu student = {"pys",23,180.0f,"男"};
	struct Stu* ps = &student;
	//利用->访问成员变量
	printf("%s %d %.2f %s", ps->name,ps->age,ps->height,ps->sex);
	return 0;
}

1.5 结构体传参

结构体传参有两种方式,分别是

  1. 结构体值传参
    结构体值传参时,形式参数作为实际参数的一份临时拷贝。
  2. 结构体地址传参
    结构体地址传参,将实际参数的地址传给形式参数,形式参数的类型为结构体指针。

具体内容,查看下面代码,分析两者的不同之处。

c 复制代码
//3. 结构体传参
struct Node {
	int data;
	struct Node* next; //声明一个结构体指针
};

//3.1 结构体值传参
void print1_Node(struct Node node)
{
	printf("%d\n", node.data);
}
//3.2 结构体地址传参
void print2_Node(struct Node* pnode)
{
	printf("%d\n", pnode->data);
}
int main()
{
	struct Node node = { 23,NULL }; //结构体变量初始化
	//结构体值传参
	print1_Node(node);
	//结构体地址传参
	print2_Node(&node);

	return 0;
}

总结

本篇文章介绍了c语言中结构体的声明、定义和初始化,以及如何访问结构体的成员变量,最后介绍了结构体的传参。

相关推荐
noipp3 小时前
推荐题目:洛谷 P3726 [AHOI2017/HNOI2017] 抛硬币
c语言·数据结构·c++·算法·编程·洛谷·luogu
c238563 小时前
C/C++每日一练14
c语言·c++·算法
apocelipes4 小时前
Linux NTSYNC 简明教程
c语言·并发·linux编程
caishenzhibiao4 小时前
缠论画线主图 同花顺期货通指标
java·c语言·c#
库玛西4 小时前
快速幂算法全景总结图:从“愚公移山”到“细胞分裂”
c语言·c++·笔记·算法
bnmoel4 小时前
数据结构深度剖析二叉树・下篇:链式结构的实现 ,遍历方法全解析
c语言·数据结构·算法·二叉树·
ACP广源盛139246256735 小时前
GSV6155@ACP# Type-C 视频信号转换芯片:技术架构、工程痛点适配与落地场景分析
大数据·c语言·开发语言·人工智能·分布式·嵌入式硬件·架构
光子物联单片机5 小时前
STM32传感器模块编程实践(二十一)DIY语音控制小车套件模型
c语言·stm32·单片机·嵌入式硬件·mcu
Darkwanderor5 小时前
使用管道实现进程间通信 (IPC, Inter-Process Communitation)
linux·c语言·c++
冻柠檬飞冰走茶6 小时前
PTA基础编程题目集 7-37 整数分解为若干项之和(C语言实现)
c语言·开发语言·数据结构·算法