一:结构体与枚举的介绍:
结构体与枚举:是一种存储复杂的数据
结构体:是用户自定义的一种类型,不同类型的集合,而数组是相同类型变量的集合。
二:结构体的创建
struct user
{
char username[20];
int score;
}
这里两种不同类型的属性的结构体。
创建结构体,就是创建一个类型,计算机并没有分配内存空间。
三:结构体的调用
struct user u1;
这里就是对结构体的调用,这个时候计算机才会为其分配内存空间。
u1.username[20] = "Tom";
u1.score = 98;
以上两句就是对结构体的赋值。
四. 用指针指向结构体
char * p = &u1;
说明p是指向user类型的变量u1的地址;
则:u1.score = 98 也可以写作 (*p).score = 98;
引入新概念:p->score,用于表示(*p).score;
下面来看一个练习
#include
struct test
{
int a;
int b;
char c;
};
int main(void)
{
struct test s1 = {9,2,'A'};
struct test * p = &s1;
printf("%d %d %c
", s1.a, s1.b, s1.c);
p->a = 5;
p->b = 4;
p->c = 'C';
printf("%d %d %c
", s1.a, s1.b, s1.c);
return 0;
}
五:枚举的介绍
枚举:既不适用于普通的类型也不适合结构体那么就可以使用枚举
六:枚举的定义
#define MON 0
#define TUE 1
#define WED 2
#define THR 3
#define FRI 4
#define SAT 5
#define SUN 6
printf("MON = %d ", MON);
printf("TUE = %d ", TUE);
printf("WED = %d ", WED);
printf("THR = %d ", THR);
printf("FRI = %d ", FRI);
printf("SAT = %d ", SAT);
printf("SUN = %d ", SUN);
}
#define TUE 1
#define WED 2
#define THR 3
#define FRI 4
#define SAT 5
#define SUN 6
printf("MON = %d ", MON);
printf("TUE = %d ", TUE);
printf("WED = %d ", WED);
printf("THR = %d ", THR);
printf("FRI = %d ", FRI);
printf("SAT = %d ", SAT);
printf("SUN = %d ", SUN);
}
七:枚举的使用
我们结合上面的定义来使用者合格枚举
main(){
enum weekday { sun,mon,tue,wed,thu,fri,sat } a,b,c;
a=sun;
b=mon;
c=tue;
printf("%d,%d,%d",a,b,c);
}
enum weekday { sun,mon,tue,wed,thu,fri,sat } a,b,c;
a=sun;
b=mon;
c=tue;
printf("%d,%d,%d",a,b,c);
}
枚举坦白的说:就是c帮你封装好的一个define集合,用便于记忆的字符来代表常量
八:枚举与结构体总结
枚举提供一种使用成组的相关常数以及将常数值与名称相关联的方便途径。例如,可以为一组与一周中的七天相对应的整数常数声明一个枚举,然后在代码中使用这七天的名称而不是它们的整数值。
对于枚举有以下附加限制:
它们不能定义自己的方法。
它们不能实现接口。
它们不能定义属性或事件。
结构用于构造包含数据和函数的数据结构。
对于枚举有以下附加限制:
它们不能定义自己的方法。
它们不能实现接口。
它们不能定义属性或事件。
结构用于构造包含数据和函数的数据结构。
枚举跟结构是两回事,没什么可比性。枚举是值,结构是数据结构,换句话说,结构是值和方法的集合。
结构和枚举类型从程序实现的角度来说,是用更接近自然语言的方式来表达数据。比如说实现2维空间的点,你可以使用2维数组,但是可读性会很差。此时,你可以换用结构,结构中含有属性项x、y,这样更接近我们实际使用的方式。
枚举类型本质上就是一个标签集合,之所以有枚举变量,也是为了可读性。比如一个进程的状态有五种:创建、准备、运行、停止、销毁,如果使用数字来表示状态,我们直接用0~4来表示就行,但这样别的人会无法理解,通过枚举类型我们声明eunm status{init,ready,run,stop,destroy},就可以使程序的可读性提高
枚举类型本质上就是一个标签集合,之所以有枚举变量,也是为了可读性。比如一个进程的状态有五种:创建、准备、运行、停止、销毁,如果使用数字来表示状态,我们直接用0~4来表示就行,但这样别的人会无法理解,通过枚举类型我们声明eunm status{init,ready,run,stop,destroy},就可以使程序的可读性提高