我们使用结构体仅仅是创建了一个新的数据类型而已,并没有声明变量,是在指定新的数据类型是由哪些成员组合而成
1 | struct Student{ |
结构体初始化:
结构和数组有点像,数组用[]运算符和下标访问其成员,结构用.运算符和名字访问其成员
匿名结构体:这个结构体类型没有名称,只能在声明结构体的同时就创建变量,不能单独的声明这个结构体类型的变量
1 | struct{ |
声明一个结构体变量,如果没有为这个结构体变量的成员赋值,那么成员是有值的,这个值是一个垃圾值;在声明结构体变量的同时,只要初始化一个成员,其他的成员就会被自动的初始化为0
如果结构体类型是定义在函数的内部的,那么这个结构体类型只能在这个函数的内部使用,如果我们希望这个结构体类型可以用在所有的函数中,那么就把这个结构体类型定义在函数的外面
结构体之间比较:
相同结构体类型的变量之间是可以相互赋值的【值传递】
1 | struct Student xiaoMing={"小明",19,100}; |
结构体数组:
结构体指针:结构体变量是一个变量,struct Student xiaoMing={“小明”,18,100};
xiaoMing首先是一个变量,类型是struct Student类型的,既然xiaoMing是一个变量,那么这个变量肯定是有地址的,既然有地址,那么就可以声明一个指针指向这个结构体变量
结构指针:和数组不同,结构变量的名字并不是结构变量的地址,必须使用&运算符struct date *pDate=&today;
结构体作为函数参数:int numberOfDays(struct date d)
整个结构可以作为参数的值传入函数
这时候是在函数内新建一个结构变量,并复制调用者的结构的值
也可以返回一个结构
这与数组完全不同
结构体作为函数的参数【值传递】:
改成指针后就是地址传递了
结构体完全可以作为函数的返回值,在返回的时候,直接将这个结构体变量的值返回即可
如果你要返回结构体变量的地址,那么就要把这个结构体变量创建在堆区: