结构体,是C语言学习过程中非常重要的一个部分,特别是在后面学习数据结构的过程中。
首先,结构体,简而言之,就是创建一个模块,这个模块里面包含着需要使用的各种数据类型,将它封装成一个函数类型但又不是一个函数的整体。
对于结构体,需要从以下这几个方面来了解:
结构体的定义:
结构体是程序员自行定义和使用的
struct mental{
int age; //结构体内用来存储数据的变量
char sex;
char name[12];
}; //一个存储个人信息的简单结构体
结构体的初始化和赋值:
//创建结构体,定义struct mental 为结构体类型
struct mental{
int age;
char sex;
};
//结构体的初始化
struct mental met;//定义一个struct mental类型的met变量
#if 0
//创建结构体类型并初始化,通常选用这种
struct mental{
int age;
char sex;
char name[12];
}met;
#endif
//赋值
/*单个赋值:赋值的时候注意类型,同类型的值只能赋值给同
类型的变量,字符数组的赋值要特别注意*/
met.age = 18;
met.sex = 'w';
strcpy(met.name,"Tomy");
/*整体赋值:直接定义一个struct mental类型的met变量并初始化*/
struct mental met{
18,
'w',
"Tomy"
};//内部以逗号作为分隔符
//以这种方式进行赋值,各个数据的顺序一定要准确
访问结构体内部的数据:
结构体内部数据的访问和平常访问普通变量数据一样,直接调用变量名就可以对结构体数据进行精确的访问,只是访问时需要以定义的结构体类型的变量作为开头,即:met.age
printf("%d\n",met.age);
结构体所占用内存空间的大小
结构体内存大小等于结构体中各个成员所占大小之和。
计算结构体所占空间的大小有两个准则:效率高,省空间
结构体内存空间的是按临近的4字节或2字节来分配的。
struct mental{
int age; //int 4个字节
char sex; //char 1个字节
char name[4];// 4个字节
}met;
这个结构体所占用的空间就是12个字节,其中char sex占用一个字节,临近的int age和char name[4]分别占用4个字节,按结构体内数据类型临近的4字节或2字节来分配的.
#include
#include
void main()
{
struct number{
double sum;
int n;
char ch;
}num;
printf("size=%d\n",sizeof(num));
}
输出结果:size=16
该结构体内三种变量占用空间最大的为sum,为double型数据,
占用8个字节,n,ch各占4个字节和1个字节,按临近的4个字节分配,
总共16个字节。
若再在该结构体内加上一个int型变量,该结构体所就会占用20个字节的内存
#include
#include
void main()
{
struct number{
double sum;//占用内存空间的前8个字节 0~7
int n; // 8~11
int n1;//加在这里 12~15
char ch; //17 按四字节补齐
}num;
printf("size=%d\n",sizeof(num));
}
输出结果:20
结构体所占内存大小等于结构体中各个成员占内存大小之和,结构体的内存空间是按临近的数据类型所占字节来进行分配的。
结构体所占内存大小还有些地方有问题,留待后面写篇单独的来解决,这里就不做过多阐述。