修饰变量的关键词

auto

定义自动申请内存、释放的变量,不加就代表加
注意:局部变量和块变量都默认添加 auto , 全局变量不能加

const

用来保护数据,变量被修饰后就具有了“只读”属性
注意:真正的只读数据被修改会产生段错误,其作用只是保护!不能显式修改,但不代表不能改

int main()
{
	const int num = 10;
	int* p = (int*)#
	*p = 1000;
	printf("%d",num); 
}

输出结果:打印1000
注意:被初始化过的全局变量被const修饰后才是真正的常量。这里若将 const int num = 10; 定义成全局变量 --> 存储到只读段 --> 修改出现段错误

static

静态 ; 限制作用域,改变存储位置,延长生命周期
const int func(void); // const 修饰的是函数的返回值
static int func(void); // static 修饰的是函数
修饰函数
普通函数可以在程序中任何位置被调用
static函数只能在它所在的.c文件内调用(但可以被间接调用),防止出现函数名冲突(静态函数)
修饰变量
修饰全局变量
静态全局变量,只能在它所在的.c文件内使用,防止全局变量命名冲突
修饰局部变量、块变量
存储位置会改变:初始化存储在全局段 ; 不初始化存储在静态数据段
作用域不变
生命周期:程序运行前就定义好,程序结束后才会被释放

volatile

易变的、不稳定的 -> 告诉编译器此变量的值可能随时发生变化,不要优化它的取值过程

	  	 (volatile) int num = 0;
    	if(num == num)

一般来讲,系统获取一个num,在下一num前无更改数据的语句时,系统会直接调取前一num值,而不从内存中重新读取
而加了 volatile 后,等于告知系统此变量不稳定,在被共用的情况下可能会被更改,需要重新从内存中读取
在多线程共享一个变量、裸机、驱动编程时适合使用

register

寄存器
机械硬盘、固态硬盘、内存、缓存
申请把变量的存储位置由内存改为寄存器,但寄存器的数量有限,申请不一定成功
注意:被 register 修饰过的变量不能使用 & ,即不能取地址

extern

声明变量
多文件编程时,每个.c都会单独编译,生成一个.o文件
a.c定义一个全局变量,如果想要在b.c中使用,需要在b.c中对a.c中的全局变量进行声明
注意:只能解决编译时的错误,如果变量确实没有定义,链接时就会产生未定义错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值