C语言 - typedef关键字 | 结构体 | 结构体数组

结构体

1 - 结构体是一种自定义的数据类型,它是由其它几种数据类型构成的

2 - 结构体内存大小:以最大成员变量类型所占的空间为分配单位,按结构体成员声明的顺序自上而下分配。注:构体所占空间大小理论上应是所有成员所占内存之和,但实际上是最大成员变量所占空间的最小整数倍

3 - 代码示例:使用结构体

 1 #include <stdio.h>
 2 
 3 // 方式二:可使用宏义:用一个符号常量来表示一个结构类型
 4 #define PER struct person
 5 PER{
 6 
 7     char name[20];
 8     char sex;
 9     int age;
10     float score;
11 };
12 PER gentleman,madam;
13 
14 
15 // 方式一:常规定义
16 struct stu
17 {
18     char name[20];
19     char sex;
20     int age;
21     float score;
22 };
23 struct stu boy,girl={"Rose",'f',22,99.9}; // 声明了两个结构变量,并把其中一个变量初始化
24 
25 
26 // 方式三:定义结构类型时同时声明结构变量
27 struct animal
28 {
29     char name[20];
30     char sex;
31     int age;
32 }cat,dog;
33 
34 
35 // 直接定义结构变量
36 struct
37 {
38     char color[20];
39     float price;
40 }bike,car={"RED",999999.8};
41 
42 int main(int argc, const char * argv[]) {
43 
44     struct stu boy = {"Jack",'m',21,99.8};
45     printf("姓名:%s,性别:%c \n",boy.name,boy.sex);   // 姓名:Jack,性别:m
46     printf("姓名:%s,性别:%c \n",girl.name,girl.sex); // 姓名:Rose,性别:f
47     printf("颜色:%s,价格:%f \n",car.color,car.price);// 颜色:RED,价格:999999.812500
48     bike = car;// 相同的结构体之间可以直接赋值
49     bike.price = 8888.99;
50     printf("颜色:%s,价格:%f \n",bike.color,bike.price); // 颜色:RED,价格:8888.990234
51 
52     return 0;
53 }

typedef

1 - 它为现有类型创建一个新的名字,可用来编写更美观和可读的代码。功能就是将原有的名字替换掉,用新的名字来代替,且不改变其代表的含义。它的声明有助于创建和平台无关类型,甚至能隐藏复杂、难以理解的语法

2 - typedef 在结构体中的使用

 1 #include <stdio.h>
 2 
 3 typedef int intDemo;
 4 
 5 // 方式一
 6 struct studentA{
 7 
 8     int number ;
 9     char names [20];
10     char sex [20];
11     int age;
12     float score;
13 };
14 typedef struct studentA StuA;
15 
16 // 方式二
17 typedef struct dateInfo{
18 
19     intDemo mouth;// 使用重定义的标志符代替 int
20     int day;
21     int year;
22 }Date;// Date 是结构体名称,并非结构体变量
23 
24 // 结构体嵌套
25 typedef struct studentB{
26 
27     char names[20];
28     Date birthday;
29 }StuB;
30 
31 
32 int main(int argc, const char * argv[]) {
33 
34     // 赋值:顺序要和定义时的顺序保持一致
35     struct studentA student1 = {110110,"小红",""};
36     printf("学号:%d   姓名:%s   性别:%s   年龄:%d\n",student1.number,student1.names, student1.sex,student1.age);
37 
38     //student1.names = "花花";// 不能直接对数组进行赋值运算,编译报错
39     strcpy(student1.names,"小白");// 使用 strcpy 函数,进行修改
40     printf("修改后的姓名:%s,\n",student1.names);
41 
42     StuB boy ={"小明",{1,11,1990}};
43     printf("%s %d-%d-%d\n",boy.names,boy.birthday.year,boy.birthday.mouth,boy.birthday.day);
44 
45     return 0;
46 }

3 - 找出年龄最小的和评分最高的

 1 stA student1={1,"Linda Lusardi","female",59,98.5};
 2 stA student2={2,"Helen Flanagan","female",27,90.5};
 3 stA student3={3,"Keeley Hazell","female",32,99.5};
 4 
 5 stA max ={0};
 6 max = student1.score > student2.score ? student1 : student2;
 7 max = max.score > student3.score ? max : student3;
 8 printf("三位女神用户体验评分最高的是%s:%.2f\n",max.names,max.score);
 9 
10 stA min ={0};
11 min = student1.age < student2.age ? student1 : student2;
12 min = min.age < student3.age ? min : student3;
13 printf("三位女神芳龄最小的是%s:%d\n",min.names,min.age);

结构体数组

1 - 代码示例

 1 #include <stdio.h>
 2 typedef struct studentA{
 3 
 4     int number;
 5     char names [20];
 6     char sex [20];
 7     int age;
 8     float score;
 9 }stA;
10 
11 typedef struct dateInfo{
12 
13     int year;
14     int mouth;
15     int day;
16 }Date;
17 
18 int main(int argc, const char * argv[]) {
19     // 结构体数组初始化
20     stA general[5]={{1111,"米尼兹","man",24,98.5},{2222,"高野五十六","female",25,90.5},{3333,"巴顿","man",21,94.5},{4444,"戴高乐","female",23,99.5},{5555,"隆美尔","female",20,97}};
21     // 访问结构体数组中某一具体成员变量
22     printf("%s\n",general[0].names);
23 
24     stA max ={0};
25     for (int i=0; i<5; i++) {
26         if (max.score<general[i].score) {
27             max=general[i];
28         }
29     }
30     printf("\n顶级战将相关信息:编号:%d   姓名:%s   性别:%s   年龄:%d   战绩评分%.2f\n",max.number,max.names,max.sex,max.age,max.score);
31 
32 
33     // 按战绩进行排名(冒泡排序)
34     for (int i=0; i<5-1; i++) {
35         for (int j=0; j<5-1-i; j++) {
36             if (general[j].score<general[j+1].score) {
37                 max = general[j];
38                 general[j]=general[j+1];
39                 general[j+1]=max;
40             }
41         }
42     }
43     printf("\n战绩评分排名如下:");
44     for (int i=0; i<5; i++) {
45         printf("\n姓名:%s\t-----战绩评分:%.2f",general[i].names,general[i].score);
46     }
47     printf("\n");
48 
49     return 0;
50 }

日志信息

 

posted on 2021-09-22 20:33  低头捡石頭  阅读(201)  评论(0编辑  收藏  举报

导航