当前位置: 首页 > 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.cnnetsun.cn/news/113733.html

相关文章:

  • 【毕业设计】基于python的运维管理平台的设计与实现
  • 苹果 iOS 开发真正复杂的不是写代码这方面,是证书、构建、上架
  • FSMC-TFTLCD显示实验(5):显示一个字符串的函数传递过程追踪~
  • 基于Android的课程考勤及作业提交系统
  • 飞易通蓝牙与Wi-Fi模块:医疗产品无线连接的全能助手
  • 你的音效素材库该升级了!这个网站的分类细到超出你想象
  • Agent的“话痨”病有救了!微软黑科技教你压缩对话历史,让AI告别失忆,这篇教程太顶了!
  • ARMv7 linux中断路由以及处理
  • 【详解】基于Kubernetes部署Kafka集群
  • AIoT:从万物互联到万物智联的进化之路
  • ERROR in ./node_modules/vue-router/dist/vue-router.mjs 被报错折磨半天?真相竟是……
  • Spring Boot 自动配置的底层实现原理
  • AI如何帮你快速掌握Wireshark端口过滤技巧
  • 手把手教你复现CVE-2023-51767漏洞
  • 雷柏V500Pro键盘新手必看:5分钟搞定基础设置
  • Java小白必看:5分钟上手MD5加密解密
  • AI一键搞定Java8安装:快马平台智能配置指南
  • 二叉排序树的构建与遍历
  • AI风险行为识别系统开发:给安全防护装个“智能哨兵”
  • After Effects Roto Brush 3.0:甲方没给绿幕也要“抠人”?AI 帮你 3 秒钟搞定逐帧噩梦
  • 1分钟搞定!用zip命令快速打包你的项目原型
  • 28、Linux 文件和目录管理全解析
  • 雷科电力-REKE610D绝缘油介质损耗电阻率测试仪
  • 对于设计IT系统的相关思路
  • 轻量无负担!2025 年 3 款小巧型文件加密软件分享
  • Canoe-Autosar网络管理自动化测试脚本 Capl源码,全套,修改项目配置可以直接使用...
  • 亚马逊、速卖通采购测评:构建安全环境,保障高效下单指南
  • 软连接vs硬链接:哪种更能提升你的工作效率?
  • 完全合作型博弈:当所有人的利益捆绑在一起 (Fully Cooperative)
  • 挖SRC必须知道的25个漏洞提交平台