C/C++自定义类型(2)细节满满!

这篇具有很好参考价值的文章主要介绍了C/C++自定义类型(2)细节满满!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

该文章的上一篇文章:C/C++自定义类型(1)-CSDN博客

个人主页:仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客

专题分栏:C语言疑难_仍有未知等待探索的博客-CSDN博客

目录

 

一、引言

二、枚举

1、枚举是什么

 2、枚举的格式

3、枚举类型的初始化

4、枚举类型中常量的值 

5、枚举类型的使用 

6、枚举类型的优势 

 7、define的运算

三、 联合体

 1、联合体是什么 

2、联合体的格式

3、联合体赋值

4、联合体的大小 


一、引言

继上篇文章讲了结构体和位段之后,接着来写枚举类型和联合类型。

二、枚举

1、枚举是什么

枚举,顾名思义,就是将一些东西一一列举出来、把可能的取值一一列举。理解的话没有那么的困难。

比如:

人的性别:男、女;

星期:星期一、星期二、星期三、星期四、星期五、星期六、星期日;

三原色:红、绿、蓝;

...etc

 2、枚举的格式

和结构体的大体结构是一样的,不同的就是枚举的关键字是enum。 在枚举里面,对于常量的定义的末尾不要用分号,要用逗号相连

#include<stdio.h>
//建立一个关于性别的枚举类型
//如下结构体的关键字是enum
//           标签字是Sex
//male,female,secret是常量,每个常量与一个常数相等
enum Sex
{
	male,
	female,
	secret
};
int main()
{
	return 0;
}

3、枚举类型的初始化

像下面一样,可以对枚举类型中常量给赋值。 

#include<stdio.h>
//建立一个关于性别的枚举类型
//如下结构体的关键字是enum
//           标签字是Sex
//male,female,secret是常量,每个常量与一个常数相等
enum Sex
{
	male=1,
	female=3,
	secret=7
};
int main()
{

	return 0;
}

4、枚举类型中常量的值 

根据上述的描述,一直在说枚举类型中常量等于一个常数。但是,这个常数是电脑随机出来的吗?显然不是,如果是的话,那我们不知道这个数是多少,怎么用呢。请往下看:

1、我们可以对其进行初始化,让其代表的值可以是我们自己认为的值。

#include<stdio.h>
enum Sex
{
	male=1,
	female=3,
	secret=7
};
int main()
{
	printf("%d\n", male);
	printf("%d\n", female);
	printf("%d\n", secret);
	return 0;
}

C/C++自定义类型(2)细节满满!,C语言疑难,c语言,c++

2、如果我们不赋初值的话,那他代表的值是多少?

从下面的图片中也可以看出来,如果不对其进行初始化的时候,每个常量代表的值,从0开始往下增1。

#include<stdio.h>
enum Sex
{
	male,
	female,
	secret
};
int main()
{
	printf("%d\n", male);
	printf("%d\n", female);
	printf("%d\n", secret);
	return 0;
}

C/C++自定义类型(2)细节满满!,C语言疑难,c语言,c++

3、如果我只对第一个进行初始化的话,会发生什么现象呢? 

 当只对第一个进行初始化的时候,接下来的常量的值自增1。

#include<stdio.h>
enum Sex
{
	male=3,
	female,
	secret
};
int main()
{
	printf("%d\n", male);
	printf("%d\n", female);
	printf("%d\n", secret);
	return 0;
}

C/C++自定义类型(2)细节满满!,C语言疑难,c语言,c++

4、如果我要是对中间的枚举常量赋值,又会发生什么现象呢? 

对中间的female进行初始化,只会影响下面的常量的取值,取值为初始化的自增1。

而其上面的常量则是不会受影响,依然从第一个常量值为0开始,自增1。 

#include<stdio.h>
enum Sex
{
	male,
	female=5,
	secret
};
int main()
{
	printf("%d\n", male);
	printf("%d\n", female);
	printf("%d\n", secret);
	return 0;
}

C/C++自定义类型(2)细节满满!,C语言疑难,c语言,c++

5、枚举类型的使用 

枚举类型的变量只能由枚举类型里面的常量来赋值。 

#include<stdio.h>
enum Sex
{
	male,
	female,
	secret
};
int main()
{
	//创建一个性别的枚举类型的变量
	//枚举类型的变量只能由枚举类型里面的常量来赋值
	enum Sex sex=male;
    //sex=3;//错误,sex是枚举类型,而3是整型,类型不匹配
	return 0;
}

6、枚举类型的优势 

大家可能都会有疑惑。define也能定义的常量,为什么还需要一个 枚举类型呢?

define和枚举类型的区别
define 枚举类型
一次只能定义一个常量 一次能定义多个常量
define运算仅满足替代原则 枚举类型里的常量和定义的变量运算无异

 7、define的运算

define定义的常量的运算的原则是替代原则。 

如果根据我们自己的理解,我们一开始会认为变量m,n的值是一样的,均为10200,而事实却非如此。 

那编译器上的数是怎么来的呢?

C/C++自定义类型(2)细节满满!,C语言疑难,c语言,c++

#include<stdio.h>
#define a 100
#define b 2
#define c a+b
int main()
{
	int m,n;
	m = c * a;
	n = a * c;
	printf("%d\n%d", m,n);
	return 0;
}

C/C++自定义类型(2)细节满满!,C语言疑难,c语言,c++

三、 联合体

 1、联合体是什么 

联合体也是一种特殊的结构体类型,也有一系列的成员。其特点就是所有成员共用一块空间。

2、联合体的格式

#include<stdio.h>
union s
{
	char a;
	int b;
};
int main()
{
	union s S;
	return 0;
}

3、联合体赋值

#include<stdio.h>
union s
{
	char a;
	int b;
};
int main()
{
	union s S;
	S.a = 1;
	S.b = 2;
	return 0;
}

4、联合体的大小 

1、联合的大小至少是最大成员的大小。
2、当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

C/C++自定义类型(2)细节满满!,C语言疑难,c语言,c++

#include<stdio.h>
union s
{
	char a;
	int b;
};
int main()
{
	printf("%d", sizeof(union s));
	return 0;
}

C/C++自定义类型(2)细节满满!,C语言疑难,c语言,c++

 谢谢大家的支持!文章来源地址https://www.toymoban.com/news/detail-720179.html

到了这里,关于C/C++自定义类型(2)细节满满!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C/C++文件操作(细节满满,part2)

    该文章上一篇:C/C++文件操作(细节满满,part1)_仍有未知等待探索的博客-CSDN博客 个人主页:仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客 专题分栏:C语言疑难_仍有未知等待探索的博客-CSDN博客 目录   一、引言 二、文件的顺序 1、输入流和输出流 2、fputc 1.功能

    2024年02月08日
    浏览(48)
  • 【Linux】进度条小程序的深度解剖(细节满满)

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月16日
    浏览(33)
  • C/C++文件操作(细节满满,part1)

    个人主页: 仍有未知等待探索_C语言疑难,数据结构,PTA-CSDN博客 专题分栏: C语言疑难_仍有未知等待探索的博客-CSDN博客 目录 一、引言  二、什么是文件  1、程序文件 2、数据文件 3、文件名  4、文件路径  1.相对路径 2.绝对路径 三、文件的打开和关闭  1、文件操作的大体流

    2024年02月08日
    浏览(33)
  • UE 各类疑难杂症/快捷键/细节/优化方式

    链接: link 链接: [link](https://blog.csdn.net/aoxuestudy/article/details/124902503?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166358838316800184178729%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257Drequest_id=166358838316800184178729biz_id=0utm_medium=distribute.pc_search_result.none-task-blog-2 all sobaiduend~default-1-124

    2024年02月04日
    浏览(65)
  • 【数据结构】线性表(顺序存储和链式存储)两种方法,细节满满,保你学会

    ⭐⭐⭐⭐⭐⭐ 🎊专栏【数据结构】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【勋章】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 ⭐⭐⭐⭐⭐⭐  目录 ⭐定义:  ⭐ 理解: ⭐存储方式 : ⭐顺序存储的优缺点: 优点: 缺点: ⭐链式存储的优

    2023年04月09日
    浏览(39)
  • SQL Server跟踪(Trace)--系统跟踪日志;从小白到大神,文章细节满满,细致到令人发指。

    写在前面的话: 该文章大部分内容是摘抄  https://www.cnblogs.com/zhijianliutang/p/4113911.html 作者只是在该文章的基础上增加了,在实践的过程中,遇到的一些细节; 再此特别感谢作者指尖流淌的无私分享 如果缺省跟踪信息打开,它将在SQL Server启动时自动记录SQL Server启动信息。该

    2023年04月21日
    浏览(40)
  • <C语言> 自定义类型

    结构体是一种用户自定义的 数据类型 ,允许将不同类型的数据项组合在一起,形成一个更大的数据结构。结构体可以包含多个成员变量,每个成员变量可以是不同的数据类型,如整数、字符、浮点数等,甚至可以包含其他结构体作为其成员。 复杂对象人:名字+年龄+电话+住

    2024年02月17日
    浏览(39)
  • SQL语言类型定义

    DDL(Data Definition Language)用于定义数据库结构和对象,用于创建、修改和删除数据库的表、索引、视图、约束、触发器等。 CREATE TABLE语句用于创建表: ALTER TABLE语句用于修改现有表的结构: DROP TABLE语句用于删除表: DML(Data Manipulation Language)用于操作和处理数据库中的数据

    2024年02月17日
    浏览(36)
  • 自定义类型详解(C语言)

    结构体: 结构体是一些值的集合,这些值被称为成员变量,结构体中的成员变量可以是不同类型的变量 例如,描述一个学生 在声明结构体时,可以不完全的声明,即结构体名可以省略,这种结构体一般被称为 匿名结构体 ,只能使用一次 上面两个结构体在声明时都省略了结构

    2024年02月13日
    浏览(36)
  • C语言——自定义数据类型

    C语言自定义数据类型——结构体、共用体、枚举 结构体是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员” ,其描述了一块内存区间的大小及解释意义。 举例:构造一个新的数据类型叫student,用来描述学生。 1.3.1 概念 通过结构体数

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包