日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言关于static的解析

發(fā)布時間:2025/6/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言关于static的解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C語言關(guān)于static的解析

#include<stdio.h>

static int j;

void fun1(void)

{

??int i = 0;

i ++;

}

void fun2(void)

{

j = 0;

j++;

}

int main()

{

for(int k=0; k<10; k++)

?{

fun1();

fun2();

?}

getchar();

return 0;

}

結(jié)果:i=10j=1

?

C語言中,static關(guān)鍵字有三種用途:

1 用于全局變量定義時。

全局變量定義時加上static修飾,表示該變量為靜態(tài)全局變量。作用域為當前文件。

2 用于函數(shù)定義或聲明。

任意函數(shù)的定義或聲明中包含了static修飾,表示該函數(shù)為靜態(tài)函數(shù),只能在本文件中被調(diào)用。

3 用于局部變量定義。

局部變量定義時,帶有static關(guān)鍵字,表示其為靜態(tài)局部變量,只被初始化一次,之后每次調(diào)用函數(shù)時,該變量值為上次函數(shù)退出時的值。即,改變量的生存周期被擴展到整個程序運行時間段內(nèi)。

?

?

定義并初始化和定義之后再賦值,有區(qū)別的:

static int i = 0;//定義變量并初始化,只執(zhí)行一次賦值

static int j;

j=0; //賦值語句,每次都執(zhí)行

?

static int i = 0;這個只是定義和初始化,由于是static的,所以第一次執(zhí)行到這里時,回去定義和初始化,但是之后再到這里時,發(fā)現(xiàn)已經(jīng)定義過了,所以不會再定義,這樣也就不會初始化。這個是static的運行機制。

?

?

Staticc語言里面有兩個作用,第一個是修飾變量,第二個是修飾函數(shù)。

1Static修飾變量

按照作用范圍的不同,變量分為局部變量和全局變量。如果用static修飾變量,不論這個變量是全局的還是局部的都是存儲在靜態(tài)數(shù)據(jù)區(qū)。下面分開來講:

¨ ?????????如果用static修飾全局變量,我們稱其為靜態(tài)全局變量。

我們用static修飾全局變量的主要目的就是:使得其作用域僅限于變量被定義的文件中(即從變量定義處到本文件結(jié)尾處),其它文件不論通過什么方式都不能訪問。

¨ ?????????如果用static修飾局部變量,我們稱其為靜態(tài)局部變量。

我們用static修飾局部變量的目的主要有兩個:

1) ????????在某個函數(shù)體里面定義的靜態(tài)局部變量,只能在本函數(shù)體被訪問,即使同一個文件的其它函數(shù)也訪問不了。

2) ????????靜態(tài)局部變量總存儲在靜態(tài)數(shù)據(jù)區(qū),所以即使這個函數(shù)運行結(jié)束,這個靜態(tài)局部變量的值不會被銷毀,函數(shù)下次使用時仍然要用到這個值。

?

下面給出一個例程:

?

?

#include <stdio.h>

?

static int j; ?// 靜態(tài)全局變量

int fun1(void)

{

?????????static int i = 0;

?????????i++;

?????????return i;

}

?

int fun2(void)

{

?????????j = 0;

?????????j++;

?????????return j;

}

?

int main(int argc, char *argv[])

{

?????????int k = 0, m = 0, n = 0;

?????????for(k=0; k<10; k++){

???????????????????m = fun1( );

???????????????????n = fun2( );

???????????????????printf("%d,%d\n", m, n);

?????????}

?????????return 0;

}

?

結(jié)果:

1,1

2,1

3,1

4,1

5,1

6,1

7,1

8,1

9,1

10,1

?

從例程的運行結(jié)果可以看出:

對于fun1( ),運行一次之后,變量i保持了原來的數(shù)據(jù),并沒有銷毀,而是在下一次調(diào)用的時候繼續(xù)使用,所以才會有12310這樣的結(jié)果。而對于fun2( ),運行一次之后,變量j的值被銷毀了,所以第二次調(diào)用結(jié)束j仍然保持原值“1”,所以循環(huán)十次,每次都是1

?

?

2Static修飾函數(shù)

在函數(shù)前加static,則此函數(shù)成為靜態(tài)函數(shù)(內(nèi)部函數(shù)),我們用static修飾函數(shù)的主要目的是:用來表示不能被其它文件訪問的一個函數(shù)(和用static修飾全局變量的目的一樣,都是不允許其它文件訪問)。這樣一來便有一個好處:程序員不用擔(dān)心自己編寫的函數(shù)與其他文件的函數(shù)同名。

?

總結(jié)

以上是生活随笔為你收集整理的C语言关于static的解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。