标签:
1 #include<stdio.h> 2 int main() 3 { 4 int i=100; 5 { 6 int i=10; 7 printf("inner i=%d\n",i); 8 } 9 printf("outer i=%d\n",i); 10 return 0; 11 }
结果:
综上说明,这种情况下内层定义会覆盖(hide)外层定义当程序运行离开内层代码块,外部变量又会重新恢复作用
关于static的用处(> v <):
1 #include<stdio.h> 2 void exe(); 3 int main() 4 { 5 int i; 6 for(i=0;i<10;i++) 7 exe(); 8 return 0; 9 } 10 11 void exe() 12 { 13 int fade=0; 14 static int stay=0; 15 printf("fade=%d,stay=%d\n",fade++,stay++); 16 17 }
结果是酱紫的:
╰( ̄ω ̄o) 由上图可见,每次调用函数,fade不会记得上次自己的数值,因此每次从初始化时的数值开始;而static类型的stay则记得每次调用后的数值,并每次从记忆数值开始操作,即完成了代码块内的“静态”。
<(* ̄ー ̄)ゞps:对于函数参量是不可以使用static的,如下就不允许:
int hahaha(static int aho);//不允许哟!
*( ̄_ ̄|||)其实看到这里并没看懂,关于具体怎么用extern。。。试试看吧。。。
写了段小代码以及N次小变动:
在函数中输出外部变量yui的值:
①在声明外部变量时赋初值:
1 #include<stdio.h> 2 int yui; 3 void exe(); 4 int main() 5 { 6 exe(); 7 return 0; 8 } 9 10 void exe() 11 { 12 extern int yui; 13 yui=233; 14 printf("yui=%d\n",yui); 15 16 }
成功输出"yui=233"。
①*对函数的小变动:
1 void exe() 2 { 3 extern int yui=233; 4 printf("yui=%d\n",yui); 5 }
然后就没有然后了。。。错误提示:变量不能同时是extern&&initializer。。。
②在声明yui同时赋值,在函数的int前不加extern:
1 #include<stdio.h> 2 int yui=233; 3 void exe(); 4 int main() 5 { 6 exe(); 7 return 0; 8 } 9 10 void exe() 11 { 12 int yui; 13 printf("yui=%d\n",yui); 14 }
结果:
如果不给yui赋初值,结果也是这个。此处函数中的yui为一个独立的局部变量,暂时性hide了外部变量。
③直接在函数中输出yui:
1 void exe() 2 { 3 printf("yui=%d\n",yui); 4 }
输出"yui=233",说明外部变量对整个文件各代码块都是可识别的。
④如果在整个程序中间某处声明外部变量,该外部变量对其之前函数不可见,对其之后函数则可见。
⑤变量定义与变量声明,如图:
1 #include<stdio.h> 2 int yui=233;//变量定义,必须有 3 void exe(); 4 int main() 5 { 6 extern int yui;//变量声明,可读性高,不影响程序,可以没有。这里的声明称“引用声明(referencing declaration)” 7 exe(); 8 return 0; 9 }
Σ(  ̄д ̄;)四点了,果然又。。。没看完,算了已经习惯了QAQ明天继续。。。
【CPP.Chap12】存储类、链接和内存管理——渣渣的艰苦学习
标签:
原文地址:http://www.cnblogs.com/suzyc/p/4382653.html