前言:对于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