结构体
程序员文章站
2022-05-12 16:30:15
...
定义结构体一般形式为:
struct 结构体名
{
成员表列
}变量名表列;
例如:
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1,student2;
说明:
1、结构体类型与结构体变量是不同的概念,不要混淆。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。
2、结构体类型中的成员名可以与程序中的变量名相同,但而这不代表同一对象。例如,程序中可另定义一个变量num,它与struct Student中的num是两回事,互不干扰。
对齐方式 (按基本数据类型对齐,系统默认是8字节对齐)
干预对齐方式:
# pragma pack(2) 以2字节方式对齐。
初始化(依次初始化)
只初始化第一个成员,其它默认初始化为0。
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1 = {1001,"yhp","男","23","100","xxxx"}; //student = {1001};
结构体数组
结构体数组与数值数组不同之处在于没每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。
定义结构体数组:
struct 结构体名
{
成员表列
}数组名[数组长度];
例如:
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student[5];
结构体指针
指向结构体对象的指针变量即可指向结构体变量,也可指向结构体数组中的元素。指针变量的基类型必须与结构体类型相同。例如:
struct Student *pt; //pt可以指向 struct Student 类型的变量或数组元素
void main()
{
Student s1 = { 0 };
Student &st = s1;
Student *sp = &s1;
s1.id = 1001;//成员访问
st.id = 1002;//引用访问
(*sp).id = 1003;//指针访问
sp->id = 1004;//指针访问
}