首页 新闻 会员 周边

C++中static关键字修饰变量问题

0
悬赏园豆:10 [已解决问题] 解决于 2019-12-27 21:18

代码如下:

  1. int j()  
  2. {  
  3.    static int a = 10;  
  4.     a++;  
  5.     cout<<a<<endl;  
  6.     return a;  
  7. }  
  8.   
  9. int& j1()    
  10. {  
  11.    static int a = 10;  
  12.     a--;  
  13.     cout<<a<<endl;  
  14.     return a;  
  15. }  
  16.   
  17. int* j2()  
  18. {  
  19.    static int a = 10;  
  20.     a--;  
  21.     cout<<a<<endl;  
  22.     return &a;  
  23. }  
  24.   
  25. int main()  
  26. {  
  27.     //j()=100;   
  28.     j();  
  29.     j1() = 100;    
  30.     j1();  
  31.     *(j2())=200;  
  32.     j2();  
  33. }

当第3,第11,第19行的变量a,不使用static变量修饰时,第29,第31中的赋值不会改变a的值。使用static修饰后就可以了,请问这是为什么?谢谢

C++ c
shell_nut的主页 shell_nut | 初学一级 | 园豆:129
提问于:2019-01-02 15:42
< >
分享
最佳答案
0

首先就是你的描述不是很清楚。其次楼上的说法并不准确。
实际上在函数内声明的变量,加 static 与否,改变的主要是:
(1)这个变量的存储位置(static 存储于和全局变量一起的 segment 中,非 static 的变量存储于当前线程的 stack 中),
(2)以及该变量的生命周期(static 是和进程的生命周期相同,而非 static 的生命周期仅在进入该函数期间)。
(3)同时还改变了赋值初始化语句的作用(从你体验到的效果上来讲,static 变量的初始化相当于在进程进入入口点之前仅执行一次,之后调用这个函数,其初始化语句将被无视或者说忽略掉,而非 static 变量在每次调用函数时都会执行,当然为什么会这样或者说其本质到底是什么,需要从编译器级别去解释)。

因此多个函数都声明相同的 static 变量 a 的效果是什么?它们相当于多个(可见性被局限在函数内)的独立的全局变量(彼此独立)。剩下的只是你看到的现象,当你明白其原理和本质,是很容易解释的,就自己体会吧。

收获园豆:6
hoodlum1980 | 小虾三级 |园豆:559 | 2019-01-10 15:24
其他回答(1)
0

看下局部变量和全局变量,你这全部是局部变量,设置了static的只会有一个变量a,建议再看下static的概念

收获园豆:4
rxzf | 园豆:208 (菜鸟二级) | 2019-01-02 16:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册