C语言基础学习(二)——变量与常量

C语言基础学习(二)——变量与常量,第1张

C语言基础学习(二)——变量常量 变量:

局部变量:定义在某个大括号范围之间的变量
生命周期:
执行到定义时分配内存空间,大括号结束则内存被释放

作用域:
只能大括号范围内访问该变量

全局变量:定义在所有函数之外的变量
生命周期:
程序运行时,分配内存空间,整个程序结束时释放内存空间

作用域:
在程序任意的位置都可以访问

变量的修饰符:
auto:变量的默认修饰符,可以省略不写,表示变量的内存由系统自动分配与释放
const:常量修饰符,在程序运行的过程中其值不可更改
signed:变量的默认修饰符,有符号
unsigned:无符号,让数据类型的最高位不作为符号位出现
例如:char a; //保存的数值范围为:-128到127
unsigned char a; //保存的数值范围为:0-255
static:静态修饰
修饰局部变量:
1.静态局部变量初始化只会被执行一次
2.变量会随着程序的结束而结束
修饰全局变量:
该全局变量只能在本文件中访问到
修饰函数:
该函数只能在本文件中访问到

程序的异常处理:
编译时异常:只检查语法问题
warning:会产生可执行文件,但运行不一定正常
error:不会产生可执行文件
运行时异常:逻辑错误
段错误(core dump):非法内存访问
利用输出语句测试程序

常量:

1.定义的常量:
语法:const 数据类型 常量名 = 值;

2.常量的直接量:直接使用的量值
10 3.14 ‘a’ “hello”

整形数的直接量值为:int
浮点数的直接量值为:double
字符的直接量值为:char
字符串的直接量值为:char *(地址)

数据类型的转换:
隐式转换:
编译器自动进行一些基本的类型转换
强制类型转换(显示转换):
(数据类型)数据:将某个数据强制转换为指定的数据类型
带单位的数据:
10L:long类型的数据10
3.14f:float类型的数据3.14

3.标识常量:宏 使用宏的好处(没有出栈入栈节省效率和空间)
语法:#define 宏名 宏值
在编译时,会使用宏值替换代码中所有使用宏名的地方

注意:
1、宏最外面要有(),每个参数也必须有()
2、宏一般不加; 因为,他不是一条语句
3、宏不能用于 ++ --的 *** 作

带参宏:(有一定缺陷,如上面三点)
语法:#define 宏名(参数列表) 宏体
#define MAX(x,y) {(x)>(y)?(x):(y)}

拓展:
我们一般对一个函数进行修饰 inline

	inline 修饰一个函数,告诉编译器,在函数的调用的位置直接展开,而不产生函数调用
	不需要入栈出栈 但代码体积会增大
	如:static inline int add(int a,int b){return a+b;}
	在调用这个函数时会类似带参宏一样替换展开,既继承了带参宏的优势,又弥补了带参宏的缺陷
	
	
		带参宏与带参函数的区别:
		
		带参宏      					 	带参函数
		编译时替换			 				运行时执行
		参数类型不限						参数类型需提前定义
		程序长度 可变						程序长度不变
		不占运行时间 只占编译时间			调用和返回时占用时间

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5594004.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存