一、前言
结构体作为C语言中的重要一环,可以用它来对数据进行封装,把一些相似的成员放在同一个结构体中,其对于代码的可维护性以及移植性等带来的好处不言而喻。
当结构体变量被定义后,其内部成员会被系统自动分配在一段地址连续的内存空间中,这使得我们的引用操作也变得方便许多。
一些同学在刚接触结构体时,容易对结构体的定义以及声明这块搞不清楚,下面我把结构体的声明和定义归类总结了一下,分享给大家。
二、名词解释
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型。
简单来说就是:由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构体(struct)。
三、结构体声明
结构体声明一般是放在一个.h文件中,当需要定义结构体时,再include包含一下该头文件即可。
头文件代码如下:
#ifndef __STRUCT_DEMO_
#define __STRUCT_DEMO_
/** 结构体的几种声明方式:
* 一、使用typedef来重命名结构体。
*/
typedef struct _student_t //推荐,只声明结构体,不分配内存空间,需要用时另行定义
{
int age;
unsigned char score;
char *sex;
}student1_t;
typedef struct //结构体名称可以省略
{
int age;
unsigned char score;
char *sex;
}student2_t;
/**
* 二、直接声明结构体
*/
struct _student3_t //推荐,只声明结构体,不分配内存空间,需要用时另行定义
{
int age;
unsigned char score;
char *sex;
};
struct _student4_t //声明结构体的同时把变量也给定义了,会分配内存空间,不推荐
{
int age;
unsigned char score;
char *sex;
}stu4,stu5;
struct //同理,结构体名称也可以省略
{
int age;
unsigned char score;
char *sex;
}stu6;
#endif
声明结构体是不占内存空间的,也不会生成变量,推荐在.h中对头文件进行声明。
四、结构体定义及初始化
在.c文件中对结构体变量进行定义
有几种定义方式,看代码:
#include "stdio.h"
#include "struct_demo.h"
/** 结构体初始化的几种方式:
*
*/
student1_t student1 = {18,90,"boy"}; //1、定义时赋初值,需要按顺序填写
student1_t student2 = { //2、定义时赋初值,可以打乱顺序
.age = 19,
.score = 95,
.sex = "girl"
};
student1_t student3 = { //3、定义时赋初值,可以打乱顺序
age : 19,
score : 95,
sex : "girl~"
};
//第四种方法是直接引用赋值,这里不再举例了。
int main()
{
printf("%d,%d,%s\r\n",student1.age,student2.score,student3.sex);
printf("%d,%d\r\n",stu4.age,stu6.score);
return 0;
}
五、运行
六、结语
如您在使用过程中有任何问题,请加QQ群进一步交流。
QQ交流群:906015840 (备注:物联网项目交流)。
获取资料:微信扫描下方二维码,关注公众号:一个物联网项目的前世今生。
静晨出品:静之所想,晨之所计