C语言结构体和C语言链表

前言:对于C语言指针方面,因为博主目前还不能够达到自己想要的水平,所以我就不在这里班门弄斧了,现在总结一下结构体,等再过段时间,我把指针弄的炉火纯青的成都的时候,我在来献丑吧 0v0

文章目录

我们之前学过一些构造类型,数组就是其中之一,但是数组中的每一个元素都具有相同的数据类型,换言之一个数组只具有一种数据类型,因此在处理大量的相同数据类型的时候,用数组的话是很方便滴!但是呢,在处理实际问题的时候,数组就不适合解决了。比如对一个学生的信息进行处理,学生信息里面包含着姓名、学号、年龄、爱好、成绩、家庭住址等等。所以我们这个时候就需要使用用户自定义类型来操作了。而接下来我要讲的结构体、联合体均属于用户自定义数据类型。

结构体

下面我将介绍的是每种类型的书写格式,方便大家有个直观的感受,关于更详细的我在后面会给链接的。

一、结构体类型的定义

在C语言中定义结构体类型的一般格式为:

 struct 结构体类型名{
    
    
	 数据类型 成员数据1;
	 数据类型 成员数据2;
	...
	数据类型 成员数据n;
 };

其中struct是用户用于定义具有结构体类型的关键字,此关键字告诉编译系统,准备定义一个结构。结构类型名是由用户自己定义的标识符。 结构体如下:

 struct student{
    
    
 int num;
 char name[10];
 char sex;
 int age;
 char department[20];
 float score;
 };

二、结构体类型的定义于使用

当在程序中定义了某个具体的结构体类型的以后,意味着有了一个新的数据类型,可以定义该类型的变量。定义结构体类型变量可以有以下3中方法:

1、先定义结构,在说明结构变量:

struct 结构体名 变量1,变量2,变量3...,变量n;

2、在定义结构类型的同时说明结构变量

struct 结构体名{
    
    
	数据类型 成员数据1;
	数据类型 成员数据2;
	...
	数据类型 成员数据n;
}变量表;



3、直接说明结构变量

struct{
    
    
	数据类型 成员数据1;
	数据类型 成员数据2;
	...
	数据类型 成员数据n;
}变量表; 

如:
struct{
    
    
int num;
char name[10];
char sex;
int age;
char department[20];
float score;
}stu1,stu2,stu3;

注意:结构体名和结构体变量是两个不同的概念。结构体名表示一种自定义的数据类型,编译系统并不给它分配存储空间。只有通过结构体说明了结构体变量后,才对改变量分配了存储空间。

//对于访问结构体成员这里提一下,后面将会讲到总共的三种方式:
//例如:
stu1.num
stu1.name
stu2.birthday.month
//运用数组和指针的表示,定义了如下的结构体:
struct s{
    
    
int num;
char sex;
int age;
}stu;
struct s *p=stu;
//第一种:
(*p).num;
//第二种
p->num;
//第三种
stu.num;

//有关的方式后面会相继提到的。

三、结构体类型变量的赋值于初始化

再定义结构体变量的说明语句中,可以对定义的结构体变量赋初值,即初始化。此方式于对数组的初始化相似。
例如:

struct s{
    
    
int num;
char sex;
int age;
}stu={
    
    12345,"MAN",12};

四、结构体类型数组的定义于引用

结构体类型数组在构造树、表、队列等数据结构时特别方便。

1、结构体类型数组的定义

> 定义结构体类型数组前要先定义一个结构体类型,然后就可以像定义普通数组一样定义结构体类型数组。

定义结构体类型数组有以下三种方式:
方式一:

struct student{
    
    
int num;
char name[10];
char sex;
int age;
char department[20];
float score;
}stu[30];

方式二:

struct student{
    
    
int num;
char name[10];
char sex;
int age;
char department[20];
float score;
};
struct student stu[30];

方式三:

struct{
    
    
int num;
char name[10];
char sex;
int age;
char department[20];
float score;
}stu[30];

结构体数组的初始化

>定义后,结构体数组中的元素在内存中是连续存放的 。
struct student
{
    
    
	int num;
	char name[10];
	char sex;
	int age;
	float score[3];
};
#include <stdio.h>
void main(){
    
    
	int i;
	struct student stu[9]={
    
    
		{
    
    1,"zhao",'M',19,95.0,84.0},
			{
    
    2,"zhao1",'M',19,95.0,84.0},
			{
    
    3,"zhao2",'M',19,95.0,84.0},
			{
    
    4,"zhao3",'M',19,95.0,84.0},
			{
    
    5,"zhao4",'M',19,95.0,84.0}};
		for(i=0;i<9;i++){
    
    
			stu[i].score[2]=(stu[i].score[0]+stu[i].score[1])/2;
			printf("%-8d%-10s%-5c%-6d%-7.2f%-7.2f%-7.2f\n",stu[i].num,\
			stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
		}
		/*在C语言中'\'这个符号一般用于为了书写好看而换行且不影响代码执行的符号,详 见
		http://blog.csdn.net/shanshangyouzhiyangM/article/details/52931920
		这个描述的挺清楚的,不懂的话可以参考,如果还有问题建议留言。*/
}

  

详 见
http://blog.csdn.net/shanshangyouzhiyangM/article/details/52931920

猜你喜欢

转载自blog.csdn.net/Songbook/article/details/79617331