C语言结构体/共用体/宏定义/枚举
1、结构体
结构体是一个集合,集合中包含很多个元素,这些元素的数据类型可以相同,也可以不相同。所以结构体是一种数据封装的方法。结构体存在的意义就在于,把很多数据类型不相同的变量封装在一起,组成一个大的新的数据类型。
代码①:
#include <stdio.h>
//1、结构体定义是在主函数外面
//2.结构体定义的是新的组合类型,不是变量,也不消耗内存
struct Student
{
char name[20]; //学生姓名
unsigned int num; //学生学号
int isMale; //性别
}; //逗号不能省略
int main(void)
{
struct Student s1; //s1是一个变量,类型是struct Student
//给结构体变量赋值
s1.name[0] = 'A';
s1.name[1] = 'B';
s1.name[2] = 'C';
s1.num = 123; //学号为123
s1.isMale = 1; //男生
printf("%s,%d,%d\n",s1.name,s1.num,s1.isMale);
return 0;
}
ABC,123,1
【注】
使用结构体的步骤:
第一步:定义结构体类型。结构体类型的定义是在函数外面(函数外面为全局)的
第二步:使用第一步定义的类型来定义结构体变量。
第三步:使用变量。实际上使用结构体变量的时候,使用的是结构体变量中封装的各个子元素,而不是结构体变量本身。
【注】
若结构体里面的某个元素没有初始化,则值是随机的。
2、共用体(union)
#include <stdio.h>
//定义共用体类型
union MyUnion
{
int a;
char b;
float c;
};
int main(void)
{
union MyUnion u1;//定义变量
u1.a = 129;
printf("%d,%d,\n",u1.a,u1.b);
return 0;
}
129,-127,
结构体,是对多个数据的组合与封装。
共用体,共用体中只有一个东西,只是它被好几个名字(和类型)共用。,如上面的例子,当129表现为int类型时,输出为129。当129表现为char类型时,通过十进制输出则为-127(char类型-127~128)
3、宏定义
在C语言中,一般使用常数的时候,都不是直接使用,而是先把该常数定义为一个宏,然后在程序中使用该宏名。这样做的好处是,等我们需要修改这个常数时,只需要在宏定义处修改一次即可。而不用到代码中到处去寻找,看哪里都用过该常数。
#include <stdio.h>
#define N (123) //这里没有分号哦,相当于N == 123,后面的数字最好用()括起来
int main(void)
{
int a = N;
printf("%d\n",a);
}
123
宏定义要注意的问题:
1、宏定义一般是在函数的外面
2、宏定义必须要先定义,再使用宏。如果先使用就会编译报错。
3、宏定义中宏名一般用大写。不是语法规定的,是一般约定俗成的。
4、枚举(enum)
#include <stdio.h>
//定义一个枚举类型,名字叫enum week
enum week
{
SUN,
MON,
TUE,
WEN,
THU,
FRI,
SAT,
};
int main(void)
{
enum week today;//使用枚举类型,定义一个变量today
today = SUN;
switch(today)
{
case SUN:
printf("今天星期7\n");
break;
case MON:
printf("今天星期1\n");
break;
case TUE:
printf("今天星期2\n");
break;
case WEN:
printf("今天星期3\n");
break;
case THU:
printf("今天星期4\n");
break;
case FRI:
printf("今天星期5\n");
break;
default:
printf("今天星期6\n");
break;
}
}