「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战」。
在C语言中结构体通常用来将不同类型的变量打包在一起,方便对对象的统一管理。
结构体定义
要使用结构体时,首先要进行结构体的声明。声明的形式如下:
1 | c复制代码struct 结构体名 { |
比如现在要描述一本书的标题,作者,价格。声明格式如下:
1 | c复制代码struct book{ |
用字符数组来存储书的标题和作者,用浮点型来存储书的价格。声明完成之后,此时在内存中并没有分配存储空间。因为结构体也是一种数据类型,它和char、int、float等类型一样属于数据类型。
声明完结构体之后,就告诉了计算机,我要使用的数据类型是结构体类型。在后面操作这个对象的时候,就按照结构体的方式来操作。此时就相当于只写了一个 int ,并没有定义变量。
下面开始定义结构变量。
1 | c复制代码struct book b1; |
此时就在内存中创建了一个结构类型的变量b1,系统就会在内存中给b1分配一个存储空间。
在上面将结构体的声明和变量的定义分成了两部分,也可以使用一起实现。
1 | c复制代码struct book{ |
用这种方式就可以声明一个结构类型,同时定义了一个结构变量b1。如果还想在定义一个变量b2,可以在初始化的时候定义。也可以单独定义。
单独定义:
1 | c复制代码struct book b2; |
在声明的时候时候定义
1 | c复制代码struct book{ |
如果这个结构体不需要再定义其他的变量,那么在声明时可以省略结构体名,比如上面的代码就可以简写为:
1 | c复制代码struct { |
将结构体名book直接省略掉,但是这样的话,以后如果再想单独定义一个变量b3就不能实现了。
结构体初始化
方法一:
初始化上面定义的两个变量,在定义的时候直接初始化。
1 | c复制代码 struct book{ |
初始化的时候,各个项之间用逗号隔开,按照定义时的顺序,依次填入各个成员的值。
方法二:
可以每个成员单独初始化
1 | c复制代码struct book{ |
定义好变量之后,给每个成员单独初始化,初始化的时候可以不按照顺序来。在单独初始化的时候,这里要注意一下,需要将结构体声明中的的字符数组改为指针。如果还是用字符数组,那么在给数组赋值的时候,只能使用下标,一位一位的给数组中每个元素赋值。而不能将数组定义好之后,然后给数组的首地址一个字符串。字符数组只有在定义的时候,可以直接用字符串赋值。如下所示:
1 | c复制代码 char str[30] = "123"; //正确 |
如果需要给成员单独初始化,就需要将申明中的数组改为指针,如果不想修改的话,那么也可以在定义的时候,直接初始化。
方法三:
在初始化的时候,可以直接使用结构成员运算符—点(.)访问结构体中的成员。这样的话就可以直接指定要向哪个成员赋值。可以不按照顺序来对成员进行赋值。
1 | c复制代码struct book{ |
在操作结构体中的对象时,也可以使用点(.)来访问。比如需要打印结构成员的信息时,可以使用下面的代码:
1 | c复制代码 printf("%s %s %f\r\n",b1.author,b1.title,b1.value); |
在结构体变量后加一个点就可以直接访问变量中的具体成员。成员的操作方法和它对应的类型操作方法一样。
本文转载自: 掘金