C语言之复合类型

145 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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;
}