c中结构体的4种定义
1、常规的标准方式:
1 #include <stdio.h>
2
3 struct student{
4 int age;
5 float score;
6 char sex;
7 };
8
9 int main(int argc, char **argv)
10 {
11 struct student studenta = {
12 30,
13 79.5,
14 'm'
15 };
16
17 printf("年龄: %d, 分数: %.2f 性别:%c\n", studenta.age, studenta.score, studenta.sex);
18
19 return 0;
20 }
编译::!gcc % -o %<
运行::!%<
结果:年龄: 30, 分数: 79.50 性别:m
2、不够标准的方式(声明时初始化):
1 #include <stdio.h>
2
3 struct student{
4 int age;
5 float score;
6 char sex;
7 } studenta = {
8 30,
9 79.5,
10 'm'
11 };
12
13 int main(int argc, char **argv)
14 {
15 printf("年龄: %d, 分数: %.2f 性别:%c\n", studenta.age, studenta.score, studenta.sex);
16
17 return 0;
18 }
编译::!gcc % -o %<
运行::!%<
结果:年龄: 30, 分数: 79.50 性别:m
3、最糟糕的方式(不完全声明时初始化):
1 #include <stdio.h>
2
3 struct {
4 int age;
5 float score;
6 char sex;
7 } studenta = {
8 30,
9 79.5,
10 'm'
11 };
12
13 int main(int argc, char **argv)
14 {
15 printf("年龄: %d, 分数: %.2f 性别:%c\n", studenta.age, studenta.score, studenta.sex);
16
17 return 0;
18 }
编译::!gcc % -o %<
运行::!%<
结果:年龄: 30, 分数: 79.50 性别:m
4、我推崇的方式:
1 #include <stdio.h>
2
3 typedef struct _student{
4 int age;
5 float score;
6 char sex;
7 } Student;
8
9 int main(int argc, char **argv)
10 {
11 Student studenta = {
12 30,
13 79.5,
14 'm'
15 };
16
17 printf("年龄: %d, 分数: %.2f 性别:%c\n", studenta.age, studenta.score, studenta.sex);
18
19 return 0;
20 }
编译::!gcc % -o %<
运行::!%<
结果:年龄: 30, 分数: 79.50 性别:m
这几种方式中,第四种的优点:
1.使用了类型定义,typedef
2.遵照了结构体的命名约定,就是在student前加_,使用_student
3.使用首字母大写式的命名,使得使用者明白这是一种类型,而不是普通变量
4.为将来的使用创建了良好的基础,后期声明无需频繁使用struct表明是结构体,只需要使用Student即可,既便于使用和理解,又能有效的完成封装与信息隐藏。
因此,个人更推崇第四种方式。
读人民邮电出版社的《深入理解C指针》原著:Richard Reese 陈晓亮译,p126有感,于九江学院通信实训中心机房 2015年 3月30日