c语言中的存储类型

        auto:(自动类型)
		在定义变量的时候,变量前默认就是auto
		auto int a; 等于 int a
	
		非自动类型的变量:
		1.全局变量
		2.static修饰的变量
		
	register:寄存器类型的变量
		register int a;
		寄存器类型的变量,要不普通的变量执行效率要高。
		在一个soc(system on chip)上寄存器的个数是有限
		在(A53:40)
		
	static:
		static 修饰的变量如果没有初始化默认为0;
		static int a;
		printf("a = %d\n",a); //结果是0
		
		作用:1.延长变量的生命周期
				void static_fun()
				{
					static int a = 1;
					a ++; 
					printf("a = %d\n",a);                                                                   
				}
				static_fun();  //2
				static_fun();  //3

			  2.限制作用域
			  static修饰的函数或者变量只能在本文件
			  中使用。
			  
	const:(只读变量)
		const int a=10;
		a = 100; //错误
		
		int a = 10;
		int b = 1000;
		const int *p = &a; 
		*p = 100;  错误的
		p = &b;    正确的
		表示p执行的内容不能修改,但是p是可以修改的。
		
		int a = 10;
		int b = 1000;
		int const  *p = &a; 
		*p = 100;  错误的
		p = &b;    正确的
		表示p执行的内容不能修改,但是p是可以修改的。
		
		
		int a = 10;
		int b = 1000;
		int * const p = &a; 
		*p = 100;  正确的
		p = &b;    错误的
		*p可以修改,p不允许修改
		
		const int  * const p = &a;
		代表*p和p都是只读的。
		
		
	extern:
		extern int a;
		extern int add(int a,int b);
		
		a或add函数定义没有在当前的.c中,它是
		在另外一个.c中定义的。
		
	volatile:(容易改变的)
		
		volatile int *p = 
			(volatile int *)0x8000000; (地址中保存的是10)
		
		*p 取出地址中的值10; 
		//(硬件将0x8000000地址中的值改为了100);
		//由于地址中的数据不是别这个程序修改的,
		//所以下面这个式子在运算的时候,还是拿的之前的
		//数据
		y = *p + 1;  //不加volatile是11  
		             //如果加volatile就是101
					 
		总结:防止编译器对变量优化,每次在使用这个变量
			 的值的时候,都需要重新从内存上取值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值