c语言中的六个存储类型:auto register static extern const volatile

1.auto:

自动类型的变量(非自动类型的变量:全局变量,或者static修饰的变量)自动类型的变量前默认缺省auto,在实际的工作开发过程中是见不到的。

2.register:修饰的是寄存器变量

  1.register修饰的变量要比普通的变量运算效率高(但不能把所有的变量都定义成register修 的, 因为寄存器在芯片内部是有个数限制的)
  2.register修饰的变量不能够取地址

3.static

3.1static的作用:

        1.static局部变量在函数内定义,它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。再次调用该函数可以再次使用。

        2.static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。

        3.static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。初始化的时候自动初始化为0

          (1)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用static修饰

          (2)考虑到数据安全性(当程想要使用全局变量的时候应该先考虑使用static

3.2static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

1)static修饰的全局变量和去普通的全局变量一样都分配在静态区,但是普通的全局变量,它作用于整个源代码,当如果出现同名的全局变量时,只能有一个初始化,不然就会连接失败,而static修饰的全局变量,只作用于本文件中,在其它文件中不起作用,因此可以避免在其它源文件中引起错误。

2)static局部变量只初始化一次,下一次的值依据上一次的结果值,从而延长了生命周期,而局部变量如果程序结束再次开始时候,又将被重新定义。

3)static函数在内存中只有一份,普通函数爱每个被调用中维持一份拷贝。

4.extern:修饰调用的变量或者函数是在其他文件中的  

 extern int num;    //extern修饰的num变量不能赋初值,只起到声明的作用
                    //如果修饰的变量是其他文件中的,变量前一定要加extern
 extern int add(int ,int );//声明函数的时候可以加也可以不加

5.const:在谁前谁就不能被修改

   const:修饰的是只读的变量(const修饰的不是常量)
   const int a=10;  //a的值不能够修改了
      
   const int *p = &a; //p可以修改,*p不能修改
   int const *p = &a;//p可以修改,*p不能修改
   int *const p = &a//p不可以修改,*p可以修改   //const在谁前谁就不能更改
    
  注:const修饰的局部变量在栈空间,const修饰的全局变量在.ro段

1.欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了;

 2.对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或      二者同时指定为const

 3.在一个函数声明中,const可以修饰形参表明他是一个输入参数,在函数内部不可以改变其值;

  4.对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类的变量;

  5.对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为左值

6.volatile

volatile:易变的
    如果使用volatile修饰变量,变量每次都会从内存中获取值,不从缓存中获取值。
        
    使用的场景:
     1.对应硬件寄存器前最好加上volatile  
        请向0xaabbccdd地址中写0x12345678的值?
        #define P (volatile unsigned int *)0xaabbccdd
        *P = 0x12345678;
        2.在多线程中访问全局,这个全局变量就需要加volatile   
        3.在中断中访问非自动类型的变量

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
回答: 在C语言autostaticexternregister、const和volatile是用来定义变量和函数的存储类别和属性的关键字。\[2\] auto是默认的存储类别,用于定义自动变量,它的生命周期与所在的代码块相同。static用于定义静态变量,它的生命周期在程序运行期间都存在,但作用域仅限于所在的代码块。extern用于声明外部变量或函数,它表示该变量或函数是在其他文件定义的。register用于定义寄存器变量,它的值存储在寄存器,以提高访问速度。const用于定义常量,一旦被赋值后就不能再修改。volatile用于定义易变的变量,每次都会从内存获取值,而不是从缓存获取值,适用于对硬件寄存器的访问、多线程访问全局变量和访问非自动类型的变量。\[3\] 关键字const和volatile的使用可以提高程序的可读性和可靠性,因此在编写程序时,我们应该根据需要合理地使用这些关键字。 #### 引用[.reference_title] - *1* *2* [Cautostaticregisterextern、const和volitate](https://blog.csdn.net/m0_70888041/article/details/128286925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [c语言的六个存储类型:auto register static extern const volatile](https://blog.csdn.net/a2998658795/article/details/125958396)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值