C語言之最名不符實的關鍵字----static


昨天看了下c語言的書,感覺關鍵字static蠻重要的,所以就總結出來下,它有兩個作用:

第一個作用:修飾變量。

靜態全局變量,作用域僅限於變量被定義的文件中,其他文件即使用extern 聲明也沒法
使用他。

靜態局部變量,在函數體里面定義的,就只能在這個函數里用了,同一個文檔中的其他
函數也用不了。

下面是書上的例子,我加了點注釋:

static int j;                //j為靜態全局變量。 void fun1 (void
{
static int i = 0; //i為靜態局部變量。
       	i++;                //第二次調用這個函數時,i的值還是上次的值。} void fun2 (void ) {        j = 0;                 //記住j是靜態全局變量。       j++; } int main() {        for(k=0; k<10; k++)     //k沒定義?  //k=0->9,十次循環調用。       {            fun1();            fun2();         } 	return 0;}

問題:最后i,j的值為多少?

我的答案是:i=10,j=1。因為每調用一次fun1(),就使i+1,而每次調用fun1(),j都先賦於值0再加1。
最后我把程序補全后在電腦上運行答案是對的。(如果有錯誤,請幫忙指點下哈!!!

補全代碼為:

#include <stdio.h>
static int j;
int fun1 (void)
{
static int i = 0;
i++;
return i;
}

int fun2 (void)
{
j = 0;
j++;
return j;
}
void main()
{
int m,n,k;
for(k=0; k<10; k++)
{
m=fun1();
n=fun2();
}
printf("%d,%d",m,n);
}

 
 
 
第二個作用:修飾函數。

這個功能比較簡單常用,我就把原文粘貼在下面:

“函數前加static 使得函數成為靜態函數。但此處“static”的含義
不是指存儲方式,而是指對函數的作用域僅局限於本文件(所以又稱內部函數)。使用內部函
數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件
中的函數同名。
    關鍵字static 有着不尋常的歷史。起初,在C 中引入關鍵字static 是為了表示退出一個
塊后仍然存在的局部變量。隨后,static  在C 中有了第二種含義:用來表示不能被其它文件
訪問的全局變量和函數。為了避免引入新的關鍵字,所以仍使用static 關鍵字來表示這第二
種含義。

    當然,C++里對static 賦予了第三個作用,這里先不討論,有興趣的可以找相關資料研
究。 ”

其實好多問題要自己把代碼補全,讓計算機來驗證你的答案是不是正確的。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com