自定义类型(结构体,枚举,联合)


前言

本文将对自定义类型——结构体、枚举、联合分别进行介绍,了解其定义声明以及相关特点。


一、结构体

1.结构体的声明

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
结构体的声明:(描述一个学生)

struct Stu
{
 char name[20];       //名字
 int age;             //年龄
 char sex[5];         //性别
 char id[20];         //学号
}//注意有分号

2.结构体变量的定义

在声明结构体时可进行结构体变量进行定义
例1:(声明类型的同时定义变量

struct Point
{
 int x;
 int y;
}p1; //变量p1

例2:(定义结构体类型变量)

struct Point
{
 int x;
 int y;
}; 
struct Point p2; //定义结构体变量p2

3.结构体变量的初始化

例1:定义变量的同时赋初值

struct Stu        //类型声明
{
 char name[15];//名字
 int age;      //年龄
};
struct Stu s = {"小明", 20};//定义结构体变量S并进行初始化

例2:结构体嵌套初始化

struct Point
{
 int x;
 int y;
}; 
struct Node
{
 int data;
 struct Point p;
}n1 = {10, {4,5}}; //结构体嵌套定义  n1

struct Node n2={20,{6,8}};//嵌套定义n2

嵌套定义过程如下:
在这里插入图片描述

4.结构体传参

例:两种方式

struct P
{
 int data[10];
 int num;
};
struct P p = {{1,2,3,4}, 20};   //定义结构体变量  p
//结构体传参
void print1(struct P p)
{
 printf("%d\n", p.num);
}
//结构体地址传参
void print2(struct P* p)
{
 printf("%d\n", p->num);
}
int main()
{
 print1(p);  //传结构体
 print2(&p); //传地址
 return 0;
}

结果:
在这里插入图片描述


二、枚举

枚举即一一列举,例如一周七天、一年12个月均可以进行列举。

1.枚举的定义

例1:枚举星期

enum Day//星期
{
 Mon,
 Tues,
 Wed,
 Thur,
 Fri,
 Sat,
 Sun
};

例二:枚举颜色

enum Color{ RED, GREEN, BLUE};

其中,{ }中的内容是枚举类型的可能取值,也叫枚举常量 。默认从0开始,一次递增1,也可以在定义的时候也赋初值。
例3:

enum Color//颜色
{
 RED=1,
 GREEN=2,
 BLUE=4
};

2.枚举的使用举例

#include<stdio.h>
enum Color { QUIT,RED, GREEN, BLUE };  //枚举常量默认从0 开始
int main()
{
	int select = 1;
	printf("*******选择颜色*********\n");
	printf("*******1.Red***********\n");
	printf("*******2.Green**********\n");
	printf("*******3.Blue***********\n");
	printf("*******0.Quit***********\n");
	printf("请选择:\n");
	scanf("%d", &select);
	if (select == 0)
	{
		return;
	}
	switch (select)
	{
	case RED:      //相当于 case 1:
		printf("红色!\n");
		break;
	case GREEN:
		printf("绿色!\n");
		break;
	case BLUE:
		printf("蓝色!\n");
		break;
	}

	return 0;
}

结果:

在这里插入图片描述

3.枚举的优点

(1) 增加代码的可读性和可维护性
(2)和#define定义的标识符比较枚举有类型检查,更加严谨。
(3)防止了命名污染(封装)
(4)便于调试
(5)使用方便,一次可以定义多个常量


三、联合

联合也是一种特殊的自定义类型。这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)
(1)联合体类型定义

//联合类型的声明
union Un
{
 char c;
 int i;
};
//定义联合变量 un
union Un un;  

联合的成员是共用同一块内存空间,一个联合变量的大小,至少是最大成员的大小。
例:

#include<stdio.h>
union Un
{
	int i;
	char c;
};
int main()
{
	union Un un;
	printf("%d\n", &(un.i));
	printf("%d\n", &(un.c));
	un.i = 5;
	un.c = 'a';
	printf("%d\n", un.i);
	printf("%c\n", un.c);
	return 0;
}

结果:
在这里插入图片描述


总结

以上就是本文的全部内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值