20240322,结构类型,枚举,

 一,枚举

1.1 常量符号化 

程序中用符号表达数字,增加程序的可读性?

#include<stdio.h>//能跑,但是报错不推荐将字符串转为CHAR** 
const int red=0;
const int yellow=1;
const int green=2;
//为撒在前面? 
int main(int argc,char const *argv[]){
	//两个参数,整数,字符串数组【记不住 ,再复制一遍】 
	//整数告诉我们字符串数组有多大,数组带入函数需要另一个参数告诉大小
	int color=-1;
	char* colorName = NULL;
	//不懂
	printf("请输入你喜欢的颜色代码:\n");
	scanf("%d",&color);
	switch (color){
		case red :colorName="red";break;
		case yellow :colorName="yellow";break;
		case green :colorName="green";break;
		default :colorName="unknown";break;
	} 
	printf("你喜欢的颜色是%s\n",colorName);
	return 0;
}

输入数字,因为初始化了三个常量INT,输入数字赋值给COLOR,COLOR==1==1==YELLOW,就是COLOR==YELLOW,CHAR*COLORNAME是指针字符串,????直接给了被指的东西吗?

1.2 枚举

#include<stdio.h>
//其实只有头文件之前的变了

enum color{red,yellow,green} ;

//一般用大写区分常量 

用户定义的数据类型,ENUM 枚举类型的名字{名字0,名字1,……名字N};分号
大括号里面的就是常量符号 ,CONST INT类型,值0--N,一个值有序排列的常量集合

#include<stdio.h>
enum color{red,yellow,green} ;//声明一种新的数据类型color
void f(enum color c);
//函数需要的参数是一个ENUM里面的常量?给常量名? 
//这种类型使用的时候要带上NUME 
int main(void){
	enum color t=red;
	scanf("%d",&t);
	f(t);
	return 0;
}
void f(enum color c){
	printf("%d\n",c);
}
//输出常量的值 

实际上是以整数来做内部计算和输入输出的

1.3 自动计数的枚举

#include<stdio.h>
enum COLOR{RED,YELLOW,GREEN,NumCOLORS};
int main(void){
	int color=-1;
	char* Cnames[NumCOLORS]={
	"red","yellow","green"
	};
	char* colorName=NULL;
	printf("请输入你喜欢的颜色代码:\n");
	scanf("%d",&color);
	if(color>=0&&color<NumCOLORS){
		colorName=Cnames[color];
	}else{
		colorName="unknown";
	}
	printf("你喜欢个鬼颜色%s\n",colorName);
	return 0;
}

这是什么东西啊丢!!!!!啊啊啊啊啊啊

#include<stdio.h>
//	[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
enum COLOR{RED,YELLOW,GREEN,NumCOLORS};
//跟在最后的名字后面的字,他的值,就是前面的计数
//NumCOLORS=3? 
//好像是一种固定写法,不能直接改成3,丢,讲黑话 
int main(void){
	int color=-1;
	char* Cnames[NumCOLORS]={
	"red","yellow","green"
	};
	//指针数组,下标是枚举量 
	char* colorName=NULL;
	//初始化,0地址 
	printf("请输入你喜欢的颜色代码:\n");
	scanf("%d",&color);
//数字
	if(color>=0&&color<NumCOLORS){
		colorName=Cnames[color];
	}else{
		colorName="unknown";
	}

//遍历数组 Cnames,数字color和数组下标比较,如果相等,colorName指向那个数组单元
	printf("你喜欢个鬼颜色%s\n",colorName);
    printf("代号%d\n",colorName);
	return 0;
}

 所以这里ENUM一下,就是为了他自动计数?得到下标量,剩下的一点关系没有,改了ENUM的排序好像也没有什么关系

#include<stdio.h>

enum COLOR{YELLOW,GREEN,RED,NumCOLORS};

int main(void){
	int color=-1;
	char* Cnames[NumCOLORS]={
	"red","yellow","green"
	};
	

好像输出没什么影响,丢!!!啊啊啊啊啊 

1.4 枚举量

#include<stdio.h>

enum CO{RED=1,YELLOW,GREEN=5,NumCOS};
enum COLOR{DSF,DD,FF,NumCOLORS};
//计数也是0-N 
int main(int argc,char const* argv[]){
	printf("code for GREEN is %d\n",GREEN);//5
	printf(" %d\n",NumCOS);//6
	printf(" %d\n",NumCOLORS);//3
	return 0;
}
#include<stdio.h>
enum CO {RED=1,YELLOW,GREEN=5,NumCOS};
int main(int argc,char const* argv[]){
	enum CO co=0; 

	//ERROR:invaild conversation from 'int' to 'CO'
    //1,2,5是有意义的值,0,3,4,是没有意义的??

	printf(" %d\n",co);
	return 0;
}

 我直接一个看不懂听不懂 

虽然枚举类型可以当作类型使用,但是实际上很(bu)少(hao)用
如果有意义上排比的名字,用枚举比constint方便
枚举比宏(macro)好,因为枚举有int类型 

是C里面没有那么成功的东西,主要就是用来定义符号量,而不是当作一种数据类型来使用? 

二,结构

2.1 结构类型

2.2 结构与函数

2.3 结构中的结构

三,联合

3.1 类型定义

3.2 联合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/479310.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移动硬盘加Type-C接口充电:革新存储与充电体验

随着科技的飞速发展&#xff0c;电子设备的功能和性能也在不断提升。近年来&#xff0c;移动硬盘作为数据存储的重要工具&#xff0c;其接口和充电方式的革新也备受关注。特别是Type-C接口的普及&#xff0c;为移动硬盘带来了前所未有的便利。本文将深入探讨移动硬盘加入Type-C…

Linux 源码安装: PostgreSQL 15.6数据库

Linux 源码安装&#xff1a; PostgreSQL 15.6数据库 1、下载 postgresql-15.6.tar.gz 源码包2、安装postgresql-15.62.1、解压 tar.gz 文件2.2、进入解压后的目录2.3、创建 "postgres" 用户和对应的用户组2.4、创建data目录&#xff0c;授权2.5、编译 PostgreSQL2.6、…

【Qt】使用Qt实现Web服务器(五):QtWebApp上传文件、详解请求数据处理过程

1、示例 1)演示 2)上传图片 3)显示图片 2、源码 示例源码Demo1->FileUploadController void FileUploadController::service(HttpRequest& request, HttpResponse& response)

Linux docker7--私有镜像仓库registry和UI搭建及使用

一、对于开源的镜像&#xff0c;如redis&#xff0c;nginx等&#xff0c;可以通过官方仓库Docker Hub&#xff0c;或者国内的阿里云等共有仓库下载获取到镜像。但是企业内对于自己的研发产品不可能往公共仓库去发布镜像的&#xff0c;一般都会搭建私有的镜像仓库&#xff0c;保…

快速排序(递归)

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a;任取待排序元素序列中的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右子序列中所有元素均大…

哲♂学家带你深♂入了♂解结构体及结构体内存大小问题

目录 概要 一、结构体的声明 二、结构体变量的创建和初始化 三、结构体的特殊声明 四、结构体内存对齐 1、对齐原则 2、例一 对齐数 计算方法 3、例二 总结 概要 结构体是我们日常编程中经常要用到的一种自定义类型&#xff0c;使用起来也是十分的方便。接下来就由…

Git常用操作命令

Git常用操作命令 前言 Git是一个分布式版本控制系统&#xff0c;用于跟踪和管理软件开发项目的版本历史。Git 是我们日常工作中使用频率极高的工具&#xff0c;各种指令让人眼花缭乱&#xff0c;这里对Git的一些相关命令进行总结。 常用命令 一般来说&#xff0c;日常使用g…

今日AI:Gemini Pro1.5向所有人开放;Stable Diffusion核心团队集体离职;HeyGen5.0上线视频翻译功能;剪映内测视频翻译功能

欢迎来到【今日AI】栏目!这里是你每天探索人工智能世界的指南&#xff0c;每天我们为你呈现AI领域的热点内容&#xff0c;聚焦开发者&#xff0c;助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解&#xff1a;AIbase - 智能匹配最适合您的AI产品和网站 &#x1f91…

十七、LockSupport

TestLockSupport 淘宝面试题&#xff1a;实现一个容器,提供两个方法,add,size。写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束面试题:写一个固定容量同步容器,拥有put和get方法,以及 getcount方法,能够支持2个生产者线程以…

企业数字化转型:是竞争力的关键,还是行业炒作?

企业作为市场经济活动的核心主体&#xff0c;其角色已经从传统的资源集聚和生产组织形式逐步演变为数据驱动、智能决策的创新引擎。数字化转型对于企业而言&#xff0c;并非炒作概念&#xff0c;而是实实在在提升竞争力的关键路径。 什么是企业&#xff1f; 企业是市场经济体系…

网络安全是什么? 为什么要学网络安全 ?网络安全怎么学习?

网络安全是什么&#xff1f; 网络安全是指保护计算机网络、网络设备、应用程序、数据和用户免受非法访问、攻击、破坏或泄漏的过程和技术。网络安全包括多个领域&#xff0c;例如网络防御、漏洞管理、加密技术、身份验证和访问控制等等。 网络安全非常重要&#xff0c;因为现…

【C++】string类模拟实现

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. 构造函数和析构函数3. 遍历3.1 下标[]3.2 迭代器 4. Modifiers4.1 push_back和append4.2 4.3 insert4.4 erase4.5 swap 5.Capacity5.1 resize5.2 clear 6. 深浅拷贝6.1 浅拷贝&#xff08;值拷贝&#xff0…

【MySQL】基本查询(1)

【MySQL】基本查询&#xff08;1&#xff09; 目录 【MySQL】基本查询&#xff08;1&#xff09;表的增删改查Create单行数据 全列插入多行数据 指定列插入插入否则更新替换 RetrieveSELECT 列全列查询指定列查询查询字段为表达式为查询结果指定别名结果去重 WHERE 条件英语不…

【MySQL】3.2MySQL事务和存储引擎

MySQL事务 一、MySQL事物的概念 事务是一种机制&#xff0c;包含了一件事的完整的一个过程 ●事务是一种机制、一个操作序列&#xff0c;包含了一组数据库操作命令&#xff0c;并且把所有的命令作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这一组数据库命令要么…

关于java字节码文件加载过程中,各种变量和常量的存储位置

java变量存储位置 前提 下面的东西都是在jdk1.8基础上做出的探究 首先我们先解释一下在各种网站上出现的一些名词到底是什么&#xff1f; 1.字面量&#xff1a;声明为final的int、long、double、char等基本类型的常量值&#xff08;如final int a 1 这是一个常量值&#x…

宝塔面板系列——两种方式安装青龙面板

因为最近旧windows服务器到期了&#xff0c;在搬服务器&#xff0c;新服务器尝试用Linux系统。过程中有很多不懂的地方&#xff0c;只能边搬迁边学边弄&#xff0c;顺带记录下来&#xff0c;哪天又要搬迁了&#xff0c;翻翻自己的文章也就一应俱全了。 非科班出身&#xff0c;选…

yarn安装包时报错error Error: certificate has expired

安装教程&#xff1a; 配置镜像地址&#xff1a; npm config set registry https://registry.npmmirror.com//镜像&#xff1a;https://developer.aliyun.com/mirror/NPM 安装yarn&#xff1a; npm install --global yarn查看版本&#xff1a; yarn --version卸载&#xff…

力扣题库27题移除元素(c语言)

解法&#xff1a; int removeElement(int* nums, int numsSize, int val) {int src0,dst0;while(src<numsSize){if(nums[src]val){src;}else{nums[dst]nums[src];src;dst;}}return dst; }

Vue el-table 合并单元格

一般常见的就是下图这种的单列&#xff0c;上下重复进行合并。 有时候可能也会需要多行多列的合并。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&qu…

搭建GItlab实现自动化部署Springboot项目(超详细)

提示&#xff1a;本例程中使用Docker搭建GItlab&#xff0c;Gitlab runner 通过编写CICD文件实现Springboot项目自动部署。 1、拉取GitLab镜像 命令&#xff1a; docker pull gitlab/gitlab-ce2、部署Gitlab&#xff1a; 我们通过docker搭建的gitlab部署项目的时候会出现一个…