typedef是类型定义的意思,typedef struct是为了使用这个结构体方便。
在了解typedef之前我们先来了解一下什么是结构体类型:
C++提供了许多种基本的数据类型(如int、float、double、char等)供用户使用。但是由于程序需要处理的问题往往比较复杂,而且呈多样化,已有的数据类型显得不能满足使用要求。因此C++允许用户根据需要自己声明一些类型,用户可以自己声明的类型还有结构体类型(structure)、共用体类型(union)、枚举类型(enumeration)、类类型(class )等,这些统称为用户自定义类型(user-defined type,UDT)。
在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。C和C++允许用户自己指定这样一种数据类型,它称为结构体。它相当于其他高级语言中的记录(record)。例如,可以通过下面的声明来建立数据类型。
struct Student//声明一个结构体类型Student
{
int num;//包括一个整型变量num
char name[20];//包括一个字符数组name,可以容纳20个字符
char sex;//包括一个字符变量sex
int age;//包括一个整型变量age
float score;//包括一个单精度型变量
char addr[30];//包括一个字符数组addr,可以容纳30个字符
};//最后有一个分号
有点类似于java中的类,结构体是用户自定义的类型,比如在java中我们可以用
class student{
private string name;
private string num;
...
}
还有一些函数,在c语言中结构体中只能是数据,但是对于C++和java这种面向对象的语言来说里面还可以有函数。
值得一提的是,前面只是指定了一种结构体类型,它相当于一个**模型**,但其中并无具体数据,系统也不为之分配实际的内存单元为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。
如上面我们已经定义了一个结构体类型Student,那么我们就可以用它来定义结构体变量,如:
struct Student stu1,stu2;
这说明现在stu1,stu2都是结构体类型了,里面所包含的内容就必须喝上面定义的Student结构体相照应。
当然也可以直接在声明的时候就定义两个结构体变量
```cpp
struct Student//声明结构体类型Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1,student2;//定义两个结构体类型Student的变量student1,student2
关于结构体类型,有几点要说明:
(1) 不要误认为凡是结构体类型都有相同的结构。实际上,每一种结构体类型都有自己的结构,可以定义出许多种具体的结构体类型。
(2) 类型与变量是不同的概念,不要混淆。只能对结构体变量中的成员赋值,而不能对结构体类型赋值。在编译时,是不会为类型分配空间的,只为变量分配空间。
(3) 对结构体中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。
(4) 成员也可以是一个结构体变量。
(5) 结构体中的成员名可以与程序中的变量名相同,但二者没有关系
关于结构体里面的 变量
在定义了结构体变量以后,当然也可以引用这个变量
(1) 可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。
(2) 可以引用一个结构体变量中的一个成员的值。
如stu1.num=10010;
(3) 如果成员本身也是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。
例如,对上面定义的结构体变量student1, 可以这样访问各成员:
student1.num (引用结构体变量student1中的num成员)
如果想引用student1变量中的birthday成员中的month成员,不能写成student1.month,
必须逐级引用,即
student1.birthday.month=12;
(引用结构体变量student1中的birthday成员中的month成员)
(4) 不能将一个结构体变量作为一个整体进行输入和输出。
例如,已定义student1和student2为结构体变量,并且它们已有值。不能企图这样输出结构体变量中的各成员的值:
cin>>student1;
只能对结构体变量中的各个成员分别进行输入和输出。
(5) 对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算种类)。
结构体数组
一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组的不同之处在于:
每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项
定义
定义结构体数组和定义结构体变量的方法相仿,定义结构体数组时只需声明其为数组即可。如
struct Student{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
Student stu[3];//定义Student类型的数组stu
突然感觉自己的c语言白学了,这些也都是在百度找的东西,通俗的理解了一下,记录一下。