#include<stdio.h>
int main(int argc, char* argv[]) {
char name[20] = "拉稀";
char dogclass = 'A';
int weight = 50;
printf("%s %c %d\n", name, dogclass, weight);
/*定义:
struct <结构体类型名> {
<成员类型1> <成员变量名1>;
<成员类型2> <成员变量名2>;
……
};
使用:
struct <结构体类型名> 结构体变量名;
*/
struct DogProperty {
char name[20];
char dogclass;
int weight;
};
struct DogProperty dog1 = { "狗蛋",'A',50 };
printf("%s %c %d\n", dog1.name, dog1.dogclass, dog1.weight);
/*由于用结构体变量每次定义都要 struct <结构体类型名> 结构体变量名,太烦人了;
为了方便,我们会使用typedef来给结构体起别名
struct <结构体类型名> {
<成员类型1> <成员变量名1>;
<成员类型2> <成员变量名2>;
……
} 结构体别名;
typedef struct <结构体类型名> 结构体别名;
使用:
结构体别名 变量名;
啊,这个世界安静了!
*/
struct DogProperty1 {
char name[20];
char dogclass;
int weight;
};
typedef struct DogProperty1 DOG;
/* 更懒地写法
typedef struct DogProperty1 {
char name[20];
char dogclass;
int weight;
} DOG;
啊,这个世界更安静了!
*/
DOG dog2 = { "二蛋",'B',20 };
printf("%s %c %d\n", dog2.name, dog2.dogclass, dog2.weight);
/* 在C++中
struct DogProperty1 {
char name[20];
char dogclass;
int weight;
};
直接用 结构体名字定义变量名;
啊,啊,这个世界更更安静了!C++大法真好
*/
DogProperty1 dog3 = { "一柱擎天",'B',20 };
printf("%s %c %d\n", dog3.name, dog3.dogclass, dog3.weight);
/*定义结构体的同时,也可以定义变量,但是结构混乱,不推荐
struct DogProperty {
char name[20];
char dogclass;
int weight;
} dog1;
*/
printf("%d", sizeof(DogProperty));
//结构体成员在内存中存储是一整块空间,像数组一样,所以应该是25
//但是由于C语言内存对齐,提高寻址效率,所以是28
}
为了充分考虑不同CPU之间的性能,C语言编译器为了提高效率,舍弃一点空间换时间效率,字节对齐,一般以int大小指标,4个字节,所以结构体大小是4的倍数