学习笔记:C语言的32个关键字
一、标准C语言的32个关键字
1、基本数据类型: signed unsigned char int float double short long void
2、构造数据类型: struct union enum
3、数据存储类别: auto static extern register
4、数据优化: const volatile
5、9条基本语句: if else switch case break default while do for return continue goto
6、其它: typedef sizeof
预编译处理符 “#”
> #include
> #define
> #ifdef
> #ifndef
> #if
> #else
> #else if
> #endif
等等
1、基本数据类型
> 1、unsigned :无符号的//用来声明一个无符号的变量。unsigned char var; //var的范围:0~255> 2、signed :有符号的(可以省略不写)//用来声明一个有符号的变量。signed char var; //var的范围:-128~127> 3、char :字符型//用来声明一个字符型变量。//占一个字节空间char var;> 4、int :整型//用来声明一个整型变量。//C51:占两个字节空间,ARM:占四个字节int var; > 5、float :浮点型//用来声明一个浮点型(实型)变量。//最多能表示到7个有效数据位。//占四个字节空间float var;> 6、double :双精度型//用来声明一个双精度实型变量。//最多能表示到15~16个有效数据位。//占四个字节空间 ,有的系统占八个字节double var; > 7、short :短整型//用来声明一个短整型变量。//C51:跟int一样,ARM:占两个字节short var; > 8、long :长整型//用来声明一个长整型变量。//ARM:跟int一样,C51:占四个字节long var; > 9、void :空型//表示一个函数没有返回值,或者无形参。void function(void);
2、构造数据类型
> 1、struct//用来声明一种结构体类型。struct stu{char sex;int age;float score;struct stu *Next;};struct stu var; > 2、union//用来声明一种共用体类型。//该类型的变量所在空间的大小以其成员占最大的那个为准,//存入该变量中的值以程序中最后存入的数值为当前值union non{char sex;int age;float score;};union non var; > 3、enum//用来声明一种枚举类型。//规定枚举类型的变量,只能在限定的范围内取值//否则,编译会出现警告(达到数据安全的效果)enum em {a = 23,b,c,d = 56,e}; //其中b=24,c=25,e=57enum em var;
3、数据的存储类别
> 1、auto :自动的(可省略不写)//定义一个局部变量,默认为auto类型的,//当它所在的函数调用结束时,释放内存//使用时才分配内存,用完即释放auto char var; > 2、static :静态的//①定义一个局部变量,该变量在定义时只进行//一次初始化,以后每次调用它所在的函数,其值//都会保持上一次调用的结果,它所在的空间不会//被释放//②被static修饰的全局变量,则只能在它所在的C//源文件中使用,其它文件不能调用,(内部全局变量)//③被static修饰的函数,只能在该函数所在的C源文//件中被调用,其它文件不能调用,(内部函数)static char var;static void function();> 3、extern :外部的//①想要调用别的C源文件中的某一个全局变量,//可以使用该关键字在该文件中修饰声明该变量//即可调用(前提是该变量没有被static修饰)//该类型的变量也是一直占着内存不释放//②想要调用别的C源文件中的某一个函数,//可以使用该关键字在该文件中修饰声明该函数//即可调用(前提是该函数没有被static修饰)extern char var;extern void function();> 4、register :寄存器的//被这个关键字修饰的变量,建议编译器将该变量在//使用时放到CPU内部寄存器中,以提高执行效率//注意:该关键字只是"建议",到底有没有将变量放到//寄存器中无从得知。一般使用在循环次数比较多的//地方。//在使用时才分配内存,用完即释放register long i = 30000;
4、数据优化
> 1、const :常的//常变量:被const关键字声明的变量,其值不能被改变。//即在声明该变量时必须要初始化该变量。//var本身还是一个变量。(数据安全检测)const char var = 100;char arr[var]; //试图声明一个长度为100的字符型数组//在MDK (ARM)中可以使用常变量来声明数组的长度//在VC++编译环境中也可以。//在C51-keil中不可以使用常变量来声明数组的长度char *const p;//指针变量p不可改变,但是它指向的地址里面的值可变 char const *p; 或 const char *p;//指针变量p可以改变,但是它所指向的地址里面的值不能改变 const char * const p; //p地址不可改变,里面的值也不能变> 2、volatile :随时会改变的//被volatile修饰的变量或寄存器会意想不到地发生改变。//①某些变量或寄存器(如状态寄存器)可能会受硬件影响;//②在多线程任务中,被其它线程修改(共享内存段);//③一个在中断服务中使用到的全局变量//④编译器会对C程序进行优化;//为了保证程序不被优化,保证CPU取到的数据是最新的//(即提醒CPU每次都必须到内存中取出变量当前的值而不//是取cache或者寄存器中的备份),使用该关键字修饰,如:int *p; *p = 1; *p = 2;//编译时,编译器会对上面的语句进行优化,//会直接优化成:int *p; *p = 2;//为了保证上面的语句不被优化,加volatile修饰变量:int * volatile p;
5、9条语句
四种结构:
> 1、顺序结构:0条 //声明语句、运算语句、赋值语句等等> 2、选择结构:2条 //多选一①、if -else if -else if ... elseif(表达式1) {语句s;}else if(表达式2) {语句s;}else if(表达式3) {语句s;}else{语句s;}//用法:顺序判断if后的"表达式"是否为真//如果碰到为真的情况,则执行其下面的{}里的"语句"//执行完后,即退出这个"多选一"的结构 ②、switch-case-breakswitch(变量) {case 常量1:语句;...;break;case 常量2:语句;...;break;case 常量3:语句;...;break;default:语句; }//用法:顺序判断"变量"是否与"常量"相等,//如果相等,则执行该常量:后的"语句s",遇到break即跳出//这个结构unsigned char i = 6;unsigned char dat;switch(i){case 3:dat = 5;break;case 5:dat = 34;break;case 6:dat = 99;break;case 7:dat = 56;break;case 6:dat = 100;break;default:dat = 68; //默认执行}//注:如果少了break,则顺序判断i的值与//case后面的常量是否相等,如果相等,则执行其//后面的语句,以后不再判断,再继续执行下面的//每一条case 后面的语句,直到default.//这种用法不使用!> 3、循环结构:3条①、forfor(语句1;语句2;语句3) {语句4;语句...;}//用法:语句1:条件初始化// 语句2:判断语句,判断条件是否成立// 语句3:修改条件语句//先执行语句1,再进行对语句2的判断,如果成立//则执行{}里的语句4...,再执行语句3,在判断//语句2是否依然成立,。当语句2不成立时,结束循环②、whilewhile(表达式) {语句;....;}//用法:先判断“表达式”是否成立,如果成立//则执行{}里的语句,执行完再次判断“表达式”//是否依然成立,成立则继续执行{},不成立则结束//此循环结构。如何来设计一个死循环?两种方法:for(;;)while(1)③、do-whiledo{语句1;...;}while(表达式);//用法:先执行{}里的语句,执行完后,判断//"表达式"是否成立,如果成立,继续执行{};//如果不成立,则结束循环> 4、转移结构:4条①、break//仅用于跳出循环结构//且仅能跳出一层循环结构for(i=10;i>0;i--){t = 10;while(t--){dat++;if(dat == 3)break;//跳出while()结构。} }②、continue//用于终止本次循环,继续从下次循环开始//正式程序中不使用,仅用于调试程序char buf = 10;while(buf--){ a++;b++;continue;//遇到continue则结束这次循环d++; //这条永远都不会执行到 e++; //这条永远都不会执行到 }③、goto//无条件转移 //一般都不建议在大的程序当中使用unsigned char dat=10;while(dat--){ a++;b++;Lable: c++;if(c == 3)goto Lable;//直接跳到Lable标号去 d++;}④、return//用于函数返回,//在函数调用时,遇到return即返回。//如果需要返回某个值,在其后加上返回值。//返回值类型必须和函数类型一致。void function(){char a,b; a++;return; //遇到return即返回调用处b++; //不会被执行return; //不会被执行}
6、其它
> 1、typedef : 类型重定义typedef unsigned char uchar;//用uchar重新定义unsigned char#define uchar unsigned char//用uchar 替换unsigned char
跟宏定义的区别:①、typedef 是在编译阶段进行定义宏定义是在预编译处理阶段完成展开②、typedef 是类型重新定义,不是简单地替换宏定义只是简单的替换,没有定义typedef unsigned char* M;#define M unsigned char*M p1,p2;//对于typedef来说:p1是指针变量,p2也是//对于宏定义来说:p1是指针变量,p2是普通变量> 2、sizeof//用来求类型所占的字节数int var = 10;char g; g = sizeof(var++);//g = 4;//注意:var++该条语句没有被执行!//()里的语句是不会被执行的。
二、数据类型关键字
1.基本数据类型(5个)
> void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果
> char:字符型类型数据,属于整型数据的一种
> int:整型数据,通常为编译器指定的机器字长
> float:单精度浮点型数据,属于浮点数据的一种
> double:双精度浮点型数据,属于浮点数据的一种
2. 类型修饰关键字(4个)
> short:修饰int,短整型数据,可省略被修饰的int
> long:修饰int,长整形数据,可省略被修饰的int
> signed:修饰整型数据,有符号数据类型
> unsigned:修饰整型数据,无符号数据类型
3. 复杂类型关键字(5个)
> struct:结构体声明
> union:共用体声明
> enum:枚举声明
> typedef:声明类型别名
> sizeof:得到特定类型或特定类型变量的大小
4. 存储级别关键字(6个)
> auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配
> static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
> extern:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明
> const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
三、流程控制关键字
1.跳转结构(4个)
> return:用在函数体中,返回特定值(或者是void值,即不返回值)
> continue:结束当前循环,开始下一轮循环
> break:跳出当前循环或switch结构
> goto:无条件跳转语句
2.分支结构(5个)
> if:条件语句 else:条件语句否定分支(与if连用)
> switch:开关语句(多重分支语句)
> case:开关语句中的分支标记
> default:开关语句中的“其他”分治,可选
3.循环结构(3个)
> for:for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件
> do:do循环结构,do 1 while(2);的执行顺序是1->2->1...循环,2为循环条件
> while:while循环结构,while(1) 2;的执行顺序是1->2->1...循环,1为循环条件以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。
相关文章:
学习笔记:C语言的32个关键字
一、标准C语言的32个关键字 1、基本数据类型: signed unsigned char int float double short long void 2、构造数据类型: struct union enum 3、数据存储类别: auto static extern register 4、数据优化: const volatile 5、9条…...
嵌入式学习 (Day:27 IPC --- 进程间通信)
IPC 进程间通信 interprocess communicate (即:进程间进行数据交换) 三大类: 进程间通信的方式(共8种) 1、古老的通信方式(Linux设计时就有的) 无名管道 有名…...

Python考试复习--day2
1.出租车计费 mile,waitmap(int,input().split(,)) if mile<3:money13wait*1 elif mile>3 and mile<15:money13(mile-3)*2.3wait*1 else:money1312*2.3(mile-15)*2.3*(10.5)wait*1 print({:.0f}.format(money)) 【知识点1】: map() 函数 【知识点1】&…...
整理好了!2024年最常见 20 道 Redis面试题(九)
上一篇地址:整理好了!2024年最常见 20 道 Redis面试题(八)-CSDN博客 十七、Redis 的过期策略有哪些? Redis 的过期策略主要有三种: 定时删除:当为一个键设置了过期时间后,Redis 会…...
IDEA使用Maven打包项目的所有的依赖
要使用 Maven 命令将 Spring Boot 项目的依赖打包到 lib 文件夹中,你可以在终端中运行以下命令: mvn dependency:copy-dependencies -DoutputDirectory./lib这个命令会将项目的所有依赖(包括运行时依赖)复制到当前目录的 lib 文件…...

【C++ 】学习问题及补充
一.自定义类型不初始化直接就赋值,比如string类会怎么样 vectr<string>里已经给每个string对象已经分配好空间,为什么不初始化再赋值会报错 在C中,std::string类是一个动态字符串类,它内部管理着一个字符数组,用…...

内存泄漏案例分享3-view的内存泄漏
案例3——view内存泄漏 前文提到,profile#Leaks视图无法展示非Activity、非Fragment的内存泄漏,换言之,除了Activity、Fragment的内存泄漏外,其他类的内存问题我们只能自己检索hprof文件查询了。 下面有一个极佳的view内存泄漏例子…...

红外超声波雷达测距
文章目录 一HC-SR04介绍1HC-SR04简介及工作原理 二用HAL库实现HC-SR04测量距离1STM32CubeMX配置2keil53代码的添加 三效果 一HC-SR04介绍 1HC-SR04简介及工作原理 超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射线而定向传播等…...

AIGC 008-IP-Adapter文本兼容图像提示适配器用于文本到图像扩散模型
AIGC 008-IP-Adapter文本兼容图像提示适配器用于文本到图像扩散模型! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 这篇论文介绍了 IP-Adapter,一种 高效地将预训练的图像到图像转换模型适应到新领域 的方法。它通过在预训练模型的 输入端 添加一个…...

Java入门基础学习笔记50——ATM系统
1、项目演示; 2、项目技术实现; 1)面向对象编程: 每个账户都是一个对象,所以要设计账户类Account,用于创建账户对象封装账户信息。ATM同样是一个对象,需要设计ATM类,代表ATM管理系…...
# linux 中使用 visudo 命令,怎么保存退出?
linux 中使用 visudo 命令,怎么保存退出? 在 visudo 中保存并退出的方法取决于您使用的文本编辑器。通常情况下,visudo 会使用 vim 或 vi 或 Nano 作为默认的文本编辑器。 1、使用 Vim 或 vi 编辑器: 按下 Esc 键退出编辑模式&…...

springboot项目,@Test写法 @Before @After
某文件示例 package cn.xxx.crm.boss;import cn.xxxx.crm.manager.mq.rabbit.AliyunCredentialsProvider; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; im…...

vue3的核心API功能:computed()API使用
常规使用方法: 这样是常规使用方法. 另一种,可写计算属性的使用方法: 这样分别定义computed的get回调函数和set回调函数, 上面例子定义了plusOne.value的值为1, 那么这时候就走了computed的set回调函数,而没有走get回调函数. 当我们打印plusOne.value的值的时候,走的是get的…...

Bootstrap5
Bootstrap5-容器 容器是Bootstrap—个基本的构建块,它包含、填充和对齐给定设备或视口中的內容。 Bootstrap 需要一个容器元素来包裏网站的内容 我们可以使用以下两个容器类: .container 类用于固定宽度并支持响应式布局的容器。.container-fluid 类用…...

宝塔部署纯Vue项目,无后端
1.打包项目 生成一个dist文件夹 2.创建云服务器根目录 3.创建站点 4.上传文件 5.访问...

spring boot3整合邮件服务实现邮件发送功能
⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 目录 内容概要 开通服务 依赖引入 配置属性 创建邮件发送工具类 测试 最近发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家…...

算法刷题day54:搜索(一)
目录 引言一、池塘计数二、城堡问题三、山峰和山谷四、迷宫问题五、武士风度的牛六、抓住那头牛七、矩阵距离八、魔板 引言 针对于蓝桥杯,搜索问题还是非常之重要的,在省赛前深知暴搜的重要性,所以提前先把提高课的搜索一章给看了࿰…...

深入了解Redis的过期策略和内存淘汰机制
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 ✨✨ 帅哥美女们,我们共同加油!一起进步&am…...

小白不知道怎么投稿?记住这个好方法
作为一名单位信息宣传员,我最初踏上这条道路时,满心憧憬着通过文字传递我们单位的精彩瞬间,让社会听见我们的声音。然而,理想与现实之间的距离,却在一次次邮箱投稿的石沉大海中渐渐清晰。那时的我,像所有“小白”一样,以为只要用心撰写稿件,通过电子邮件发给各大媒体,就能收获满…...
gRPC - Protocol Buffer 编译器安装
文章目录 Protocol Buffer 编译器安装如何安装 Protocol Buffer 编译器使用包管理器安装Linux 上,使用 apt 或 apt-get,例如:macOS 上,使用 Homebrew: 安装预编译的二进制文件(任何操作系统)其他…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...