数据结构与算法
基础---结构体
1.什么是结构体&如何定义一个结构体
C语言允许用户自己指定这样一种数据结构,它有不同类型的数据组合成一个整体以便使用。
//一个结构体的一般形式:
struct 结构体名{
成员列表:
int a;
char b;
};
//struct用来声明一个结构体,成员列表用来声明结构体中有哪些变量。
//结构体成员可以包括结构体。
/前面那样只是指定了一个结构体类型,相当于创建了一个模型,因为里面没有实际数据,所以系统不会为其分配内存单元。想要为其分配内存单元,我们需要创建结构体变量。
2.如何定义结构体变量
2.1方法一/间接
先声明结构体类型,再定义结构体变量。
struct Student{
int age;
float score;
};//声明结构体类型
struct Student XiaoMing;//定义结构体变量XiaoMing
//注意,关键字struct不能少。
2.2方法二/直接
在声明结构体类型的同时定义变量。
struct Student{
int age;
float score;
}XiaoMing,XiaoHong;
//在声明了Student类型的同时定义了XiaoMing XiaoHong变量。
2.3方法三/最直接
直接定义结构体变量
struct{
int age;
float score;
}XiaoMing;
//直接定义了结构体变量XiaoMing
//优点:快,方便。
//缺点:结构体类型不能再复用。
2.4方法四/利用typedef
typedef关键字的作用是给数据类型定义一个新名字:
typedef int ZS;//给int类型取一个新名字ZS。
ZS a;//声明int类型变量a。
我们可以将其利用于结构体变量的声明中:
typedef struct Student{
int age;
float score;
}Stu;//声明结构体类型,并且为struct Student起了一个新名字Stu。
Stu XiaoMing;//通过typedef,我们省略了定义结构体变量时必须要有的关键字struct。
//这里的Stu不是结构体变量,而是struct Studnet的别名。切记!切记!
//另外,typedef起作用是在结构体类型建立完后,换句话说,这个结构体中不能用自己起的别名:
typedef struct Student{
...
Stu stu;//这样会报错。
}Stu;
2.5几点注意
- 类型与变量是不同的概念,不是混同,只能对变量赋值,存取或运算,而不能对一个类型赋值,存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。
- 成员名可以和程序中的变量名相同,两者不代表同一对象。
3.如何使用结构体
//结构体变量不能整个使用,只能对结构体变量中的各个成员分别输入输出。
struct Student{
int age;
float score;
}XiaoMing;
XiaoMing.age = 18;//对age赋值
XiaoMing.score = 99.5;//对score赋值
printf("%d %f",XiaoMing.age,XiaoMing.score);//打印这些值