结构体(struct)
廖家龙 用心听,不照做

我们使用结构体仅仅是创建了一个新的数据类型而已,并没有声明变量,是在指定新的数据类型是由哪些成员组合而成

1
2
3
4
5
6
7
8
struct Student{
char *name;
int age;
int score;
float height;
};

struct Student stu; //代表声明了一个struct Student类型的变量,变量名字叫做stu,这个时候stu才是一个变量,才会在内存中申请空间

结构体初始化:

结构和数组有点像,数组用[]运算符和下标访问其成员,结构用.运算符和名字访问其成员

匿名结构体:这个结构体类型没有名称,只能在声明结构体的同时就创建变量,不能单独的声明这个结构体类型的变量

1
2
3
4
5
struct{
char *barnd;
char *color;
int price;
}fengshan1;

声明一个结构体变量,如果没有为这个结构体变量的成员赋值,那么成员是有值的,这个值是一个垃圾值;在声明结构体变量的同时,只要初始化一个成员,其他的成员就会被自动的初始化为0

如果结构体类型是定义在函数的内部的,那么这个结构体类型只能在这个函数的内部使用,如果我们希望这个结构体类型可以用在所有的函数中,那么就把这个结构体类型定义在函数的外面

结构体之间比较:

相同结构体类型的变量之间是可以相互赋值的【值传递】

1
2
struct Student xiaoMing={"小明",19,100};
struct Student xiaoHua=xiaoMing;

结构体数组:

结构体指针:结构体变量是一个变量,struct Student xiaoMing={“小明”,18,100}; xiaoMing首先是一个变量,类型是struct Student类型的,既然xiaoMing是一个变量,那么这个变量肯定是有地址的,既然有地址,那么就可以声明一个指针指向这个结构体变量

结构指针:和数组不同,结构变量的名字并不是结构变量的地址,必须使用&运算符
struct date *pDate=&today;

结构体作为函数参数:
int numberOfDays(struct date d)
整个结构可以作为参数的值传入函数
这时候是在函数内新建一个结构变量,并复制调用者的结构的值
也可以返回一个结构
这与数组完全不同


结构体作为函数的参数【值传递】:

改成指针后就是地址传递了

结构体完全可以作为函数的返回值,在返回的时候,直接将这个结构体变量的值返回即可

如果你要返回结构体变量的地址,那么就要把这个结构体变量创建在堆区: