关键字初识
发布日期: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.typedef

typedef 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修饰局部变量

#include
void 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;}
#include
void 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秒