
、在局部变量和全局变量各自的定义语句中加入“static”关键字,分别起到什么作用
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。
这两者在存储方式上并无不同。
这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。
由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。
从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。
把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
static函数与普通函数作用域不同。
static函数仅在本文件中使用。
只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。
对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值; static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
求解释下什么叫做局部刷新。
最好能举个简单点的功能的例子。
帮我理解下局部刷新的作用,谢谢
流水不腐,户枢不蠹,动也。
(吕不韦) 以自然之道,养自然之身.(欧阳修) 生命在于运动。
(伏尔泰) 运动是一切生命的源泉。
(达.芬奇) 只有运动才可以除去各种各样的疑虑。
(歌德) 生命就是运动,人的生命就是运动。
C语言中全局变量的作用域一定比局部变量的作用域大 对不
错 如果同一个源文件中,只有一个主函数,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。
所以是错的 8.1.1 局部变量 局部变量也称为内部变量。
局部变量是在函数内作定义说明的。
其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。
例如: int f1(int a) \\\/*函数f1*\\\/ { int b,c; …… } a,b,c有效 int f2(int x) \\\/*函数f2*\\\/ { int y,z; …… } x,y,z有效 main() { int m,n; …… } m,n有效 在函数f1内定义了三个变量,a为形参,b,c为一般变量。
在 f1的范围内a,b,c有效,或者说a,b,c变量的作用域限于f1内。
同理,x,y,z的作用域限于f2内。
m,n的作用域限于main函数内。
关于局部变量的作用域还要说明以下几点: 1) 主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。
同时,主函数中也不能使用其它函数中定义的变量。
因为主函数也是一个函数,它与其它函数是平行关系。
这一点是与其它语言不同的,应予以注意。
2) 形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
3) 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。
如在前例中,形参和实参的变量名都为n,是完全允许的。
4) 在复合语句中也可定义变量,其作用域只在复合语句范围内。
例如: main() { int s,a; …… { int b; s=a+b; …… \\\/*b作用域*\\\/ } …… \\\/*s,a作用域*\\\/ } 【例8.12】 main() { int i=2,j=3,k; k=i+j; { int k=8; printf(%d\\\ ,k); } printf(%d\\\ ,k); } 本程序在main中定义了i,j,k三个变量,其中k未赋初值。
而在复合语句内又定义了一个变量k,并赋初值为8。
应该注意这两个k不是同一个变量。
在复合语句外由main定义的k起作用,而在复合语句内则由在复合语句内定义的k起作用。
因此程序第4行的k为main所定义,其值应为5。
第7行输出k值,该行在复合语句内,由复合语句内定义的k起作用,其初值为8,故输出值为8,第9行输出i,k值。
i是在整个程序中有效的,第7行对i赋值为3,故以输出也为3。
而第9行已在复合语句之外,输出的k应为main所定义的k,此k值由第4 行已获得为5,故输出也为5。
8.1.2 全局变量 全局变量也称为外部变量,它是在函数外部定义的变量。
它不属于哪一个函数,它属于一个源程序文件。
其作用域是整个源程序。
在函数中使用全局变量,一般应作全局变量说明。
只有在函数内经过说明的全局变量才能使用。
全局变量的说明符为extern。
但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。
例如: int a,b; \\\/*外部变量*\\\/ void f1() \\\/*函数f1*\\\/ { …… } float x,y; \\\/*外部变量*\\\/ int fz() \\\/*函数fz*\\\/ { …… } main() \\\/*主函数*\\\/ { …… } 从上例可以看出a、b、x、y 都是在函数外部定义的外部变量,都是全局变量。
但x,y 定义在函数f1之后,而在f1内又无对x,y的说明,所以它们在f1内无效。
a,b定义在源程序最前面,因此在f1,f2及main内不加说明也可使用。
【例8.13】输入正方体的长宽高l,w,h。
求体积及三个面x*y,x*z,y*z的面积。
int s1,s2,s3; int vs( int a,int b,int c) { int v; v=a*b*c; s1=a*b; s2=b*c; s3=a*c; return v; } main() { int v,l,w,h; printf(\\\ input length,width and height\\\ ); scanf(%d%d%d,&l,&w,&h); v=vs(l,w,h); printf(\\\ v=%d,s1=%d,s2=%d,s3=%d\\\ ,v,s1,s2,s3); } 【例8.14】外部变量与局部变量同名。
int a=3,b=5; \\\/*a,b为外部变量*\\\/ max(int a,int b) \\\/*a,b为外部变量*\\\/ {int c; c=a>b?a:b; return(c); } main() {int a=8; printf(%d\\\ ,max(a,b)); } 如果同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。
为什么说“局部作用会导致整体涌现”
因为整体涌现与局部作用是相互影响的整体的性能状况及其变化会影响到局部的性能状态及其变化反之局部也制约整体甚至在一定条件下整体和局部是可以相互转化的
急需一些说明科研工作(社会科学)重要性的名言警句
只有艺术和科学能提高人,直到神圣的高度(胡赫)



