开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情。
一、联合体
-
联合 union 是一个能在同一个存储空间存储不同类型数据的类型;
-
联合体所占的内存长度等于其最长成员的长度倍数,也有叫做共用体;
-
同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用;
-
共用体变量中起作用的成员是最后一次存放的成员,再存入一个新的成员后原有的成员的值会被覆盖;
-
共用体变量的地址和它的各成员的地址都是同一地址。
示例程序如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
union Var
{
int a;
float b;
double c;
char d;
short f[6];//12
};
int main11()
{
union Var var;
var.a = 100;
var.b = 3.14;
printf("%d\n", var.a);
printf("%f\n", var.b);
printf("大小:%d\n", sizeof(var));
printf("%p\n", &var);
printf("%p\n", &var.a);
printf("%p\n", &var.b);
printf("%p\n", &var.c);
return EXIT_SUCCESS;
}
二、枚举
-
枚举:是一种将变量的值一一列举出来的方式,其变量的值只局限在已经列举出来的元素值的范围之内。
-
枚举类型的定义
enum 枚举
{
枚举值表
};
-
在枚举值表中应该列出所有可用值,也称为枚举元素;
-
枚举值是常量,不能在程序中用赋值语句再对它进行赋值;
-
枚举元素本身就是由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2,3......
枚举示例
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
enum Color
{
red=10,blue,green,pink,yellow=20,black,white
};
int main12()
{
int value;
scanf("%d", &value);
switch (value)
{
case red:
printf("红色\n");
break;
case blue:
printf("蓝色\n");
break;
case green:
printf("绿色\n");
break;
case pink:
printf("粉色\n");
break;
case yellow:
printf("黄色\n");
break;
case black:
printf("黑色\n");
break;
case white:
printf("白色\n");
break;
default:
break;
}
return EXIT_SUCCESS;
}
三、typedef
typedef为C语言的关键字,作用是为一种数据类型(基本类型或者自定义数据类型)定义一个新名字,不能创建新类型。
-
与
#define不同,typedef仅限于数据类型,而不能是表达式或具体的值; -
#define发生在预处理,typedef发生在编译阶段。
相应地示例程序如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
//2、定义函数指针
//1、为已存在的数据类型起别名
typedef unsigned int ui;
typedef unsigned long long ull;
//typedef struct stu ss;
typedef struct stu
{
char name[21];
int age;
int score;
char addr[51];
}ss;
int main()
{
ui a = 10;
ull b = 20;
ss stu;
stu.name;
printf("%d\n", a);
printf("%d\n", b);
return EXIT_SUCCESS;
}