C语言马拉松_03.1
2018-07-02 本文已影响13人
Wolf_Tong
结构体 联合体 枚举类型
结构体
在实际场景中有很多对象是有很多属性的,因此要描述一个对象只靠一个字符串或者数字是不够的。为了可以更好的描述对象,C语言里出现了结构体。
定义一个结构体:
当需要描述一个学生的时候,他有着一些基本属性,例如:名字、性别、年龄、身高、体重等,我们依据这些属性定义一个结构体。
struct Student{
char name[16];
bool sex;
unsigned int age;
unsigned int height;
unsigned int weight;
Student *next
};
以上就是我们定义的一个结构体的示例,需要注意:
- 定义结构体并不占用内存空间
- 定义结构体的元素时需要考虑属性的特点,例如年龄一定是正数,因此使用无符号型变量
- 结构体中的元素类型也可以是另外一个结构体,另外也可以是一个指向自己的指针元素
声明一个结构体:
struct Student stu;
struct Student *pstu;
声明结构体需要注意的是:
- 应以struct开头,有的编译器可能支持不加struct,但为了保证程序的健壮性通常要加上
- 声明结构体后,编译器便会为结构体开辟相应的内存空间
结构体元素的访问:
访问结构体的某个元素,使用'.'进行方位:
stu.age = 32;
结构体为指针类型时,使用'->'访问元素:
stu->height = 180;
需要注意的是:结构体不支持"=,+,-,*,/"等操作,但可以对地址进行"="操作,如下:
pstu = &stu;
tips
为了增加程序的可读性,我们不希望在结构体声明前还要写上struct,事实上可以通过typedef关键字来实现这个功能:
typedef struct _Student{
char name[16];
bool sex;
unsigned int age;
unsigned int height;
unsigned int weight;
Student *next
}Student;
通过typedef关键字声明后,结构体的声明便不需要添加struct
Student stu;
Student *pstu;
思考一下
通过查阅资料了解结构体在内存中的存储形式,使用格子图表示出来。