C语言结构体(struct)类型的各种用法

2023-05-16

文章目录

    • 一、基本概念
    • 二、结构体定义的三种方式(声明后有不能忘了;号)
    • 三、访问结构体成员
    • 四、结构体数组
    • 五、结构体的嵌套

一、基本概念

在C语言中,可以定义结构体类型,将多个相关的类型的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。

二、结构体定义的三种方式(声明后有不能忘了;号)

1、标准定义方式

#include <stdio.h>

//结构体类型的声明与定义分开
struct student 
{
	int age;  //年龄
	float score; //分数
	char sex;   //性别
};  //结构体类型声明结束

int main ()
{
	//结构体类型变量的定义
	struct student a={23, 98, 'f'}; 
	
	printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex );
	return 0;
}

2、声明结构体时定义变量(不环保)

#include <stdio.h>

//在结构体的声明时直接定义变量
struct student 
{
	int age;  //年龄
	float score;  //分数
	char sex;   //性别
} a={23, 87,'n'};  //声明结构体时直接定义变量a,并赋初值

int main()
{
	//在main函数中直接调用定义好的结构体变量a
	printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex );
}

3、无类型名的结构体(此法最差,只能用一次)

#include <stdio.h>

//直接定义结构体变量,没有结构体类型名
struct   
{
	int age;
	float score;
	char sex;
} t={23, 98, 'f'};

int main ()
{
	printf("年龄:%d 分数:%f 性别:%c\n", t.age, t.score, t.sex);
	return 0;
}

4、用typedef给自定义的结构体加一个名字(typedef 已有类型 新类型名)

#include <stdio.h>

//在结构体的声明时直接定义变量
typedef struct student 
{
	int age;  //年龄
	float score;  //分数
	char sex;   //性别
};  //声明结构体时直接定义变量a,并赋初值

int main()
{
	//定义结构体变量
	student a={23, 87,'n'};  //此时就可以直接用student这个类型名了
	//在main函数中直接调用定义好的结构体变量a
	printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex );
}

三、访问结构体成员

用结构成员运算符点“ . ”就可以了:结构体变量名.成员名;
注意,点其结合性是自左至右的,它在所有的运算符中优先级是最高的。
1、一维数组
比如声明了一个结构体student,定义了一个变量stu:

struct student
{
	char name[10];  //相当于一个字符串,即char型数组
	int num;  //int型数据,编号
	int age;  //年龄
	float score[3];  //3门课的分数
	char sex;  //性别
} stu;

在这个结构体中,如果要访问第二门课的分数,则需要这样访问:

//输入:
scanf("%f", &stu.score[1]);  //取的是第二门课成绩的地址
//输出:
printf("%f", stu.score[1])  //输出的是第二门课成绩

2、二维数组(同理)
比如声明了一个结构体student,定义了一个变量stu:

struct student
{
	char name[10];  //相当于一个字符串,即char型数组
	int num;  //int型数据,编号
	int age;  //年龄
	float score[3][2];  //3门课的分数,都有两次测验
	char sex;  //性别
} stu;
//输入:
scanf("%f", &stu.score[1][1]);  //取的是第二门课第二次测验成绩的地址
//输出:
printf("%f", stu.score[1][1])  //输出的是第二门课第二次测验的成绩

3、其他更高维数组的用法都是一样的道理,以此类推。

四、结构体数组

比如声明了一个结构体student,定义了一个结构体变量数组stu[3]:

struct student
{
	char name[10];  //相当于一个字符串,即char型数组
	int num;  //int型数据,编号
	int age;  //年龄
	float score[3][2];  //3门课的分数,都有两次测验
	char sex;  //性别
} stu[3];

这里的stu就是一个结构体数组,包含了3个student类型的结构体变量。
接下来我们试着访问第3个结构体变量的第1门课第2次测验的成绩:

//输入:
scanf("%f", &stu[2].score[0][1]);  //取的是第三个结构体变量第一门课第二次测验成绩的地址
//输出:
printf("%f", stu[2].score[0][1])  //输出的是第三个结构体变量第一门课第二次测验的成绩

五、结构体的嵌套

比如声明了一个结构体student,里面包含了一个结构体GoodStudent,里面声明了好学生的名字和成绩,同时定义了一个结构体变量数组stu[3]:

struct student
{
	int num;  //int型数据,编号
	int age;  //年龄
	char sex;  //性别
	struct GoodStudent
	{
		char name[10];  //相当于一个字符串,即char型数组
		float score[3][2];  //3门课的分数,都有两次测验
	}
} stu[3];

此时要访问结构体GoodStudent好学生中的成绩,仍然是用“ . ”成员访问符来访问。

比如要访问第2个结构体变量的好学生的第2门课第1次测验的成绩:

//输入:
scanf("%f", &stu[1].GoodStudent.score[1][0]);  //取的是第2个结构体变量的好学生的第2门课第1次测验的成绩的地址
//输出:
printf("%f", stu[1].GoodStudent.score[1][0])  //输出的是第2个结构体变量的好学生的第2门课第1次测验的成绩成绩
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言结构体(struct)类型的各种用法 的相关文章

随机推荐