一、结构体的定义
结构体可以由多个不同类型的数据构成。
int main()
{
//定义结构体
struct person
{
int age;
double height;
char *name;
};
//定义结构体变量
struct person p = {20, 1.55, “jack”};
struct person p2 = {.name=”jack”, .age=20; .height=1.55}; //不按顺序赋值
p.age = 30; //结构体内部变量赋值
p.name = “rose”;
}
定义结构体变量的三种方式如下图:
二、结构体的内存分析
int main()
{
//声明结构体类型,不分配内存空间
struct Date
{
int year;
int month;
int day;
};
struct Date d1 = {2014, 4, 10};
struct Date d2 = {2012, 8, 9};
d2.month = 12;
int size = sizeOf(d1);
printf(“%d\n”, size); //输出为12 = 4 + 4 + 4,三个int类型长度相加。注意:结构体所占存储空间的个数为最大成员字节数的倍数(补齐算法、对齐算法)
return 0;
}
内存示意图如下:
倘若 d2 = d1;
意味着将d1的所有成员值对应的赋值给d2的所有成员
三、结构体数组
struct RankRecord
{
int no;
char *name;
int score;
}
注意:records[0] = {4, “rose”, 9000};写法是错误的,因为结构体定义不可以使用用变量名单独赋值,变量前应该有结构体类型;所以这种情况应该使用records[0].no = 4;records[0].name = “rose”;records[0].score = 9000;
四、指向结构体的指针
“p->age”也可以用来修改结构体成员变量值。
五、结构体的嵌套
注意:结构体不可以包含自身作为成员
六、枚举
|
|