前言
本文将对自定义类型——结构体、枚举、联合分别进行介绍,了解其定义声明以及相关特点。
一、结构体
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;
}
结果:
总结
以上就是本文的全部内容。