
关键字初识
发布日期:2021-05-07 10:11:52
浏览次数:19
分类:技术文章
本文共 2792 字,大约阅读时间需要 9 分钟。
一、常见关键字:
//auto break case char const continue default do double else enum extern float for goto if //int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
对于define、include它们不是关键字,而是预处理指令
//注:现在先列出关键字,防止在定义变量名时使用到关键字二、简单讲解几个关键字
1.typedeftypedef unsigned int u_int; //typedef :类型重命名(可以将复杂的类型简单化 - 将unsigned int 重命名u_int)int main(){ //signed(有符号) unsigned(无符号) unsigned int num1 = 100; u_int num2 = 20;//同unsigned int num2=20; return 0;}
2.static - 静态的(可以修饰局部变量、全局变量、函数)
2.1.static修饰局部变量#includevoid test1(){ int a = 1; a++; printf("%d ", a);}//问程序结束后的结果?(可以先思考再与下面的答案校对)int main(){ int i = 0; while (i < 10) { test1(); i++; } //程序结束结果是:2 2 2 2 2 2 2 2 2 2 //在test1函数内创建了局部变量a,test1函数结束时int a=2被销毁,而在每次重新进入test1时又重新创建int a=1 return 0;}
#includevoid test2(){ static int a = 1; a++; printf("%d ", a);}//问现在加上static修饰局部变量的结果?(可以先思考再与下面的答案校对)int main(){ int i = 0; while (i < 10) { test2(); i++; } //程序结束结果是:2 3 4 5 6 7 8 9 10 11 //第一次进入test2函数内部,创建了局部变量a,且出来后并未销毁a //static修饰局部变量,改变了局部变量的生命周期(本质上是改变了变量的存储类型) //加上static的局部变量a,由栈区转向静态区,生命周期同全局变量一样 // 栈区 堆区 静态区 // ------------ -------------- -------------------- // | 局部变量 | 动态内存分配 | 全局变量 | // | 函数的参数 | |static修饰的静态变量| // ------------ -------------- -------------------- return 0;}
2.2.static修饰全局变量(这里新建2个文件)
文件一#include//extern声明外部符号 - 可以不加extern int g_va1;extern int g_va2;int main(){ //全局变量声明后在整个工程中都可以使用 printf("%d\n", g_va1); //不能另一个文件中使用static修饰的全局变量 //printf("%d\n", g_va2);//err //static修饰全局变量,使得这个全局变量只能在自己所在的源文件内部可以使用,其它文件不能使用 //为什么全局变量能在其它源文件内部使用? //全局变量在其它源文件内部可以使用,是因为全局变量具有外部链接属性;但是被static修饰后,就变成了内部链接属性,其它源文件不能链接到这个静态全局变量了 return 0;}
文件二、
//定义全局变量int g_va1 = 2022;static int g_va2 = 2021;
2.3.static修饰函数(这里新建2个文件)
文件一#include//声明函数 - 只要函数名、返回类型、参数类型(不一定需要参数名)extern int Add1(int, int);int main(){ int a = 10; int b = 20; //没有使用static int sum1 = Add1(a, b); printf("sum=%d\n", sum1); //使用了staitc - err /*int sum2 = Add2(a, b); printf("sum=%d\n", sum2);*/ //static修饰函数,使得函数只能在自己所在的源文件内部使用,不能在其它源文件内部使用 //本质上static是将函数的外部链接属性变成了内部链接属性(同static修饰全局变量) return 0;}
文件二
定义全局变量int Add1(int x, int y){ return x + y;}static int Add2(int x, int y){ return x + y;}
3.define定义常量和宏 - define是一个预处理指令
3.1.define定义常量#include#define A 2021int main(){ printf("%d\n", A);//2021 return 0;}
3.2.define定义宏
#include#define Add1(x,y) x+y#define Add2(x,y) ((x)+(y))int main(){ printf("%d\n", Add1(2, 3)); printf("%d\n", 4*Add1(2, 3));//11 //难道这里的结果不应该是20吗? //其实上面定义的Add1是有缺陷的 //2和3传上去后,它会替换x和y得到4*2+3 = 11 //解决方法 //1.在调用的时候改变 printf("%d\n", 4 * (Add1(2, 3)));//20 //2.在定义的时候改变 - 将后面的表达式定义为一个整体 printf("%d\n", 4 * Add2(2, 3));//20 //当然是第二种方法更好 return 0;}
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年03月26日 19时00分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
结构型设计在工作中的一些经验总结
2019-03-04
如何提升员工体验 助力企业业务增长?这个棘手的问题终于被解决了!
2019-03-04
2020 AI 产业图谱启动,勾勒中国 AI 技术与行业生态
2019-03-04
“编程能力差,90%输在了数学上!”CTO:多数程序员都是瞎努力!
2019-03-04
我是程序员,我用这种方式铭记历史
2019-03-04
CSDN湘苗培优|保持热情,告别平庸
2019-03-04
英特尔强势上新一大波数据产品,小伙伴们“奔走相告”…… | 极客头条
2019-03-04
微信小程序生命周期 / 页面的生命周期 / 页面的用户行为
2019-03-04
YbtOJ 递推算法课堂过关 例5 平铺方案【递推(简单DP)】
2019-03-04
YbtOJ hash和hash表课堂过关 例1 字符串哈希【hash】
2019-03-04
CSUST 2021 周赛 2 题解
2019-03-04
前后端数据交互之表单
2019-03-04
剑指offer JZ21 栈的压入弹出序列
2019-03-04
实现基于scrapy框架的天气预报爬虫hengYangSpaider @572311文
2019-03-04
Netty4服务端入门代码示例
2019-03-04
VL53L0x TOF激光测距的 stm32 HAL库驱动代码
2019-03-04
自定义标签(JSP2.0)简单标签
2019-03-04
MyBatis自定义类型转换器
2019-03-04
决策树(二)—— ID3和C4.5
2019-03-04
操作系统~进程的状态、转换、控制
2019-03-04