一、共用体
共用体和结构体有些类似,它们都有多个数据成员。不同的是,结构体的多个数据成员是各自独立分别存放的。
而共用体的多个数据成员却是保存在内存中的同一个位置,它们“共用”一段内存资源,所以被称为“共用体”。
同结构体变量一样,也可以通过“.”引用共用体的数据成员。
注意:共用体的各个数据成员共用同一内存资源,如果将共用体某一数据成员修改后,它所在的内存的值会发生变化,相应的这个共用体的其它数据成员也会发生变化。
二、枚举
C语言中的枚举类型,其实质是就是一个Int类型的数据。而所谓的枚举值,不过就是给一些位于某个范围内的整数值(由编译器给定或者程序员在代码中给定)一个容易记忆和使用的标识符(名字)。使用这个有意义的名字给变量赋值,在一定程度上可以提高代码的可读性。
enum TraficLight
{
Green=1, //给定枚举值
Rea,
Yellow
};
Int main()
{
enum TraficLight light;
Light = red; //为枚举类型赋值
return 0;
}
枚举值通常表达的是某一个范围内的有限的可选值,且枚举值可以作为常量使用,所以往往使用枚举值来作为switch语句的分支条件,表达对某一范围内的不同情况的处理。
switch(light)
{
case red: break;
case yellow:break;
case green:break;
}
枚举类型的意义在于提高程序代码的可读性。
举例:关于交通灯枚举编程题目
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
enum TraficLight {
red, green, yellow
};
int main()
{
enum TraficLight light;
srand(time(NULL));
int num = rand()%3;
light =(TraficLight)num;
switch(light)
{
case red : printf("目前是红灯,禁止通行n");break;
case green: printf("目前是绿灯,可以通行n");break;
case yellow:printf("目前是黄灯,快速通行n");break;
}
return 0;
}
三、typedef
关于typedef,一个关于函数指针,一个关于结构体
关于函数指针
#include <stdio.h>
typedef int (*fun)(int i, int j) ; //定义一个函数指针新类型fun,返回值为int,参数有2个整型参数
int add(int a, int b)
{ return a+b; }
int sub(int a, int b)
{ return b-a; }
int main()
{ int a,b; fun f1;
printf("input a,b:n");
scanf("%d%d",&a,&b);
if(a>b)
{ f1=add;
printf("%d+%d=%dn",a,b,f1(a,b));
}
else
{ f1=sub;
printf("%d-%d=%dn",b,a,f1(a,b));
}
return 0; }
关于结构体
#include <stdio.h>
typedef struct Student
{ int num;
char name[20];
float score;
} Stu;
int main()
{
Stu s[3]={{1,"er",89},{2,"sd",67},{3,"we",86}},*p;
int i;
for(i=0;i<3;i++)
{
printf("学号:%dt姓名:%st分数:%fn",s[i].num,s[i].name,s[i].score);
}
for(p=s;p<s+3;p++)
printf("学号:%dt姓名:%st分数:%fn",p->num,p->name,p->score);
return 0;
}