当前位置: 首页 > news >正文

C语言5——常见关键字 define定义常量 表达式求值

常见关键字

auto(可以被省略)

break(可以跳出循环)

case default for switch do while while if else

char short int long long long float double signed(有符号的) unsigned(无符号的)

const(常属性)

enum(枚举) struct(结构体) union(联合体,共用体)

extern(声明外部符号)

register(寄存器) static(静态的)

return(函数返回值)

sizeof(计算大小)

sizeof是一个操作符,用来计算变量(类型)所占内存空间的大小,不关注内存中存放的具体内容,单位是字节

strlen是一个库函数,是专门求字符串长度,只能针对字符串,从参数给定的地址向后一直找\0,统计\0之前出现的字符的个数

typedef(类型重命名)

void(函数的返回类型,函数参数)

关键字typedef

类型定义(类型重命名)

关键字static

可以用来修饰变量和函数

修饰局部变量,称为静态局部变量

void test() { int a = 1; a++; printf("%d", a); } int main() { int i = 0; while (i < 10) { test(); i++; } return 0; ) //打印结果是2 2 2 2 2 2 2 2 2 2 //若int a前加上static //static修饰局部变量的时候,局部变量出了作用域,不销毁。本质上,static修饰局部变量的时候,改变了变量的存储位置。影响了变量的生命周期,生命周期变长,和程序的生命周期一样。 void test() { static int a = 1; a++; printf("%d", a); } int main() { int i = 0; while (i < 10) { test(); i++; } return 0; ) //打印结果是2 3 4 5 6 7 8 9 10 11

修饰全局变量,成为静态全局变量

全部变量是具有外部链接属性的

编译+链接 -> 可执行程序

而当static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性,其他源文件(.c)就不能再使用到这个全局变量了(在使用时,就感觉作用域是变小了)

修饰函数,称为静态函数

一个函数本来是具有外部链接属性的,但是被static修饰的时候,外部链接属性就变成了内部链接属性,其他源文件(.c)就无法使用了

关键字register(寄存器)

电脑上的存储设备有硬盘,内存,高速缓存(cache),寄存器(集成到CPU上)

越往右访问速度越快,空间越小,造价越高

int main() { //寄存器变量 register int num = 3;//建议3:存放在寄存器中 return 0; }

define 定义常量

define定义标识符常量

#define NUM 100 int main() { printf("%d\n",NUM); int n = NUM; printf("%d\n", n); int arr[NUM] = { 0 }; return 0; }

define定义宏

宏是有参数的

#define ADD(x, y) ((x)+(y)) //宏名+宏的参数,参数是无类型的+宏体 int main() { int a = 10; int b = 20; int c = ADD(a, b); printf("%d\n", c); }

表达式求值

表达式求值的顺序一部分是由操作符的优先级和结合性决定

同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型

隐式类型转换

C的整形算术运算总是至少以缺省整型类型的精度来进行的

为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升

int main() { char a = 5; char b = 126; char c = a + b; printf("%d\n", c); return 0; } //打印-125

整型提升时按照变量的数据类型的符号位来提升的

负数的整形提升
char c1 = -1;

变量c1的二进制位(补码)中只有8个比特位:11111111

因为char为有符号的char,所以整形提升的时候,高位补充符号位,即为1,提升之后的结果是:11111111111111111111111111111111

正数的整形提升

char c2 = 1;

变量c2的二进制位(补码)中只有8个比特:00000001

因为char是有符号的char,所以整形提升的时候,高位补充符号位,即为0,提升之后的结果是:00000000000000000000000000000001

无符号整形提升

高位补0

算术转换

如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算

操作符的属性

复杂表达式的求值有三个影响的因素

1.操作符的优先级

2.操作符的结合性

3.是否控制求值顺序

先考虑优先级,如果两者的优先级相同,再考虑他们的结合性

http://www.jsqmd.com/news/106330/

相关文章:

  • 数学刷题总结
  • FlutterOpenHarmony底部导航栏组件开发
  • 2026年河北省职业院校技能大赛“信息技术应用创新”赛项(高职组)竞赛样题
  • FlutterOpenHarmony动画效果实现指南
  • 深度分析:AI智能体记忆是如何管理的?
  • 2025年中山可靠的无溶剂环氧涂料批发选哪家,石墨烯涂料/环氧玻璃钢/环氧酚醛/无溶剂环氧涂料/无溶剂环氧涂料设计推荐 - 品牌推荐师
  • 男生脱发:热门育发液哪个牌子效果最好?十大口碑防脱育发产品排行榜出炉 - 速递信息
  • 零样本克隆音色有多强?实测EmotiVoice语音复刻能力
  • kanass全面介绍(15) - Kanass如何有效集成sward文档
  • XL520无线接收芯片的简略说明
  • wechatapi-微信ipad协议新篇章-让账号更智能
  • 实用指南:智能网联汽车信息安全深度解析:从UN-R155与GB44495标准到OBD/UDS技术实践
  • sward全面介绍(14) - 集成企业微信,使用企业微信扫码登录sward
  • 【dz-943】基于单片机的电压表监测仪
  • 吴恩达深度学习课程四:计算机视觉 第二周:经典网络结构 (三)11卷积与Inception网络
  • Product Hunt 每日热榜 | 2025-12-17
  • Agent学习——通过ZENMUX来使用Xiaomi MiMo-V2-Flash(自用)
  • 苹果 iOS 开发真正复杂的不是写代码这方面,是证书、构建、上架
  • uniapp开发APP 内嵌外部 HTTPS 链接的实现方案
  • 新手跨境电商实测:Apache 搭站,雷池 WAF 零基础部署
  • es:python:指定索引的mapping和获取mapping
  • EDA 缩写全解析系列|第 2 周:J–R
  • TikTok Studio创作者工具打不开怎么办?
  • Spring Boot 自动配置的底层实现原理
  • 局部放电:电力设备的“隐形杀手”,三分钟搞懂它!
  • 全栈开发者:雷池 WAF 受欢迎,不是超越谁,是它不打扰开发
  • 工业清洗剂口碑排行:揭秘复购率高的脱漆剂定制源头,行业内工业清洗剂/去污剂厂商优选实力品牌 - 品牌推荐师
  • 电商网站如何用vue-qrcode实现优惠券分享?
  • AIoT:从万物互联到万物智联的进化之路
  • Java-IO流