------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-----结构体概念及用法
一、定义
结构体是由若干“成员”构成,每一个成员都是一个基本数据类型或者一个构造类型。
二、使用形式
struct 结构名{成员列表};
例如:struct student{
int num;
char name[20];
char sex;
float score;
};
注:1、结构体定义完成后,不会立即对其分配内存空间,只有在定义结构体变量后才会分配空间。
三、结构体变量
定义形式有2种:
(1)先定义结构体,然后定义结构体变量。
例如:
struct student{
int num;
char name[20];
char sex;
float score;
};
struct student stu1;
(2)定义结构体的同时定义变量
例如:
struct student{
int num;
char name[20];
char sex;
float score;
}stu1;
注:结构体变量的初始化同定义一样,都有两种方法,这里不再具体阐述。
四、结构体占用内存大小
结构体数据遵循模数对齐原则,因此结构体长度为模数的倍数。具体参照下面程序示例:
struct student{
int num;
char sex;
float score;
}stu1;
该数据结构中int占4字节,char占1字节,float占4字节,数据占得最大字节数为4,故模数为4,按照模数对齐原则,结构体长度为12。
struct student{
short num;
char sex;
float score;
}stu1;
上面例子中short占2字节,char占1字节,float占4字节,故模数为4,但前面short和char总共才占3个字节,故4个字节空间可以存放两个变量,因此结构体长度为8。
五、结构体作用域
(1)定义在函数内部的结构体作用域和局部变量相同,都是作用到代码段结束。
(2)定义在函数外部的结构体作用域和全局变量相同,都是作用在整个程序内。
六、结构体数组
定义:每一个元素都是具有相同结构数据类型的数组。
格式:struct 结构名{成员列表}数组名[数组长度];
初始化:2种方式
(1)先定义后初始化
struct student{
char name;
float score;
}stu1[2];
struct student stu1[2]={{"abc",70},{"bcd",86}};
(2)定义的同时初始化
struct student{
char name;
float score;
}stu1[2]={{"abc",70},{"bcd",86}};
七、结构体嵌套结构体成员也可以是一个结构体,这样就构成了结构体的嵌套。
注:结构体不可嵌套自己这个类型的变量,但可以嵌套自己这个类型的指针变量,也可以嵌套其他类型的结构体。下面是一个嵌套的程序示例:
struct Data{
int year;
int montc;
int day;}birthday;
struct student{
char name;
int score ;
struct Data birthday;//可以嵌套其他类型的结构体
struct student *stu1;//可以嵌套自己类型的指针
}stu1;