C语言关键字——static、sizeof、volatile

static:(2个作用)

1、static:修饰变量

变量又分为局部变量和全局变量,但是它们都存储在内存的静态区。

静态全局变量:作用域仅限于变量被定义的文件当中,其他文件即使使用extern声明也没有办法使用。或者说是从被定义的地方开始,一直到文件结尾都不能使用,并且在定义之前的代码行也不能使用。如果想使用的话必须加上extern,或者简单一点,直接定义在文件顶部就行。

静态局部变量:在函数体里面定义的,那么就只能在函数中使用了,同一个文档中的其他函数也用不了。由于被static修饰的变量都存放于内存的静态区,所以函数运行结束,这个变量也不会销毁,函数下次使用时依然可以使用。

2、修饰函数:

在函数前加上static使函数变为静态函数,不是指存储方式,而是限定该函数只能在本文档中使用,好处是不同人编写不同的函数时,不用担心自己写的函数和别人发生命名冲突。

sizeof:

sizeof是关键字,不是函数,举个例子:

int main()
{    
    int i = 0;
	printf("sizeof(int) = %d\n", sizeof(int));
	printf("sizeof(i) = %d\n", sizeof(i));
	printf("sizeof int = %d\n", sizeof int);
	printf("sizeof i = %d\n", sizeof i);
    
    return 0;
}

在这段代码中,sizeof(int)、sizeof(i)、sizeof i 输出的结果都是4,但是sizeof int 却发生了错误。如果sizeof是一个函数那么sizeof i 也会发生错误,所以sizeof不是函数。

sizeof在计算函数变量所占空间大小时,括号是可以省略的,而计算类型大小一定要加括号。

volatile:

volatile用于修饰某些易被某些编译器或者其他因素更改,如操作系统、线程等。遇到该修饰词声明过的变量,编译器将不会对该代码行进行优化处理,从而可以提供某些特定地址的稳定处理。

	//例1
	int i = 10;
	int j = i;
	int k = i;
	//例2
	volatile int i = 10;
	int j = i;
	int k = i;

例1中,

i赋值给j时,从内存中取出i的值赋给就j,但是这个值并没有丢掉,而是在执行k = i;时编译器不会生成新的汇编代码,直接从内存中重新取出i的值赋给k,这样提高了效率,但是必须注意,在语句之间i不能为左值。

例2中,则是生成新的汇编代码,重新在i的地址处读取数据赋值给k。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值