C语言-----结构体从入门到精通

结构体

最近老师在讲解数据结构的内容,当老师讲数据结构的代码时,经常用到结构体这个东西,趁机复习下结构体的内容。
结构体的定义:
把一些基本类型的数据组合在一起而形成的一个新的复合型的数据类型,这个就叫做结构体。
为什么需要结构体:
为了表示一些复杂的事物,而基本的数据类型无法满足相应的请求。
结构体的一般形式:

//申明一个结构体类型,注意不是结构体变量 
struct Student 
{
    int student_num;//一个学生的学号
    char student_name[MAXAUTL];//一个学生的姓名 
    bool sex;//一个bool表示性别; 
};//注意分号不能少,这也相当于一条语句; 

这个声明描述了三个变量组成的结构体,但是注意,他并没有创建一个实际的数据对象,而是描述了一个组成这类对象的元素。
结构体变量的申明的三种方式:

//1、先声明结构体类型,再定义该类型的变量
struct Student 
{
    int student_num;//一个学生的学号
    char student_name[MAXAUTL];//一个学生的姓名 
    bool sex;//一个bool表示性别; 
}struct Student st1,st2;

//2.在定义结构体类型的同时定义变量
struct Student 
{
    int student_num;//一个学生的学号
    char student_name[MAXAUTL];//一个学生的姓名 
    bool sex;//一个bool表示性别; 
}st1,st2;

//3、不指定类型名而直接定义结构体类型变量
struct  
{
    int student_num;//一个学生的学号
    char student_name[MAXAUTL];//一个学生的姓名 
    bool sex;//一个bool表示性别; 
}st1,st2;

(1)结构体类型和结构体变量是不同的概念。只能对变量赋值、存取或运算,而不能对一个类型进行赋值、存取或运算 。在编译时,对类型是不分配空间的,只对变量分配空间。
(2)结构体类型中的成员可以与程序中的变量名相同,但二者不代表同一对象。
结构体变量的初始化和引用:
定义的同时可以同时赋初值,如果定义完成以后只能单个赋值。

struct  
{
    int student_num;//一个学生的学号
    char student_name[20];//一个学生的姓名 
    char sex;//一个bool表示性别; 
}st1={123,"张三""M"}

在定义结构体变量时可以对它的成员进行初始化。初始化列表是用花括号括起来的一些常量,这些常量依次赋给结构体变量中的各成员。注意:是对结构体变量进行初始化,而不是对结构体类型初始化。

# include <string.h>
# include <stdio.h>
struct stu
{
	int num;
	char name[15];
	char sex;
	int age;
	double score;
};

int main()
{
	struct stu student;
	void list(struct stu student);
	student.num = 1001;
	strcpy(student.name, "Zhang ming");//头文件不能忘记。
	student.age = 19;
	student.score = 96.3;
	student.sex = 'M';//其他元素直接赋值。
	list(student);//调用list函数。

}

void list(struct stu student)//被调函数
{
	printf("num = %d\tname: %s\n",student.num,student.name);
	printf("sex:  %c\t\t score: %.3f\n",student.sex,student.score);
}

“.”是成员运算符,它是所有运算符中优先级最高的,因此可以把student1.num作为一个整体来看待,相当于一个变量。
如何取出结构体变量的内容的几种操作:
1.结构体变量名.成员名
2.指针变量名->成员名(在计算机内部会转换为 (*指针变量名).成员名 的方式来执行)

# include <string.h>
# include <stdio.h>
struct stu
{
	int num;
	char name[15];
	char sex;
};

int main()
{
	struct stu student;
	struct stu * P;
	P = &student; 
	student.num = 1001;//第一种方式
	P->sex = 'M';//第二种方式
	strcpy((*P).name, "Zhang ming");//头文件不能忘记。
	printf("%d,%s,%c\n",student.num,(*P).name,P->sex);
}

1.P->name 等价于(*P).name也等价于student.name
2.P->name会转化为(*P).name,这是规定。
3.P->name的含义P指向的那个结构体变量的name成员
参考:郝斌C语言视频讲解

发布了16 篇原创文章 · 获赞 73 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41948771/article/details/104591849