static變數的作用

2021-06-27 06:06:07 字數 2044 閱讀 5032

static變數的作用

1,改變變數的生命期

對於static

全域性變數而言,生命期沒有改變,在整個程式執行過程中該變數一直存在。但其作用域反而減小,只有本檔案的函式可以引用該全域性變數。

對於static

區域性變數,其作用於沒有改變,只有定義該區域性變數的函式可以引用該變數。但其生命期發生了改變,在整個程式執行期間,該變數都存在。

下面程式演示static

區域性變數,該程式開啟若干個檔案並將檔案的內容輸出到螢幕中,每輸出

5行就會輸出

1個換行:

#include #include #include #define max 1024

int output(char *file_name)

//此處注意fgets函式的使用方法

while(fgets(buf, max, fp) != null) /*每次讀入檔案的一行*/}

fclose(fp); /*關閉檔案*/

return 0;}

int main(void);

int i;

i = 0;

while(i < 3)

i ++;

}return 0;

}

注意:如果將區域性變數count

的儲存型別設定為非

static

,每個檔案的輸出行數的累加就不會被儲存了。

當然,也可以使用全域性變數來代替靜態區域性變數,但不能保證程式中其他函式對全域性變數造成干擾。

2,實現封裝和模組化設計

static儲存型別的特性決定了使用

static

關鍵字宣告的全域性變數只有本檔案內的函式可以引用,因此在

c語言中乙個源程式檔案就是乙個模組。當使用者在乙個檔案中定義了乙個

static

全域性變數後,其他檔案(模組)只能通過該模組提供的介面函式來訪問這個

static

全域性變數,而不能直接對其進行操作。

下面程式演示乙個鍊錶模組的實現。

程式1,list.c:

#include typedef node* node;	 /*自定義結點指標型別*/

static node head; /*煉表頭*/

/*鍊錶結點結構

*val: 結點的值

*/struct node;

/*插入結點函式*/

int insert_node(int value)

q = (node)malloc(sizeof(struct node)); /*建立乙個新的結點*/

if(null == q)

q->next = null; /*對結點賦值*/

q->val = value;

if(null == p) /*空鍊錶*/

p->next = q; /* 結點插入鍊錶 */

return 1;}

/* 遍歷鍊錶,列印每個結點的值 */

void print()}

/* 遍歷鍊錶,釋放每乙個結點 */

void destroy()

head = null; /* 清空鍊錶的頭指標 */

}

程式2,

list.h:

#ifndef list_h_included

#define list_h_included

extern int insert_node(int val); /*插入節點函式*/

extern void print(); /*遍歷鍊錶,列印每個鍊錶的值*/

extern void destroy(); /*遍歷鍊錶,釋放每乙個節點*/

#endif // list_h_included

程式3,main.c

#include #include #include "list.h"

int main(void)

Static變數的作用

1.全域性變數宣告為static全域性變數 全域性變數是靜態儲存方式,static全域性變數也靜態儲存方式,儲存方式一樣。但是非靜態全域性變數的作用域是整個源程式,包括源程式中的各個單檔案 而static全域性變數的作用域是單檔案,源程式中的其他檔案不能使用它,也就是作用域不同。2.區域性變數和st...

C語言 static變數及其作用

在 c 語言中,static 關鍵字不僅可以用來修飾變數,還可以用來修飾函式。在使用 static 關鍵字修飾變數時,我們稱此變數為靜態變數。靜態變數的儲存方式與全域性變數一樣,都是靜態儲存方式。但這裡需要特別說明的是,靜態變數屬於靜態儲存方式,屬於靜態儲存方式的變數卻不一定就是靜態變數。例如,全域...

static作用 靜態變數的生存週期和作用域

首先要理解生存週期與作用域的區別 生存週期 變數從定義到銷毀的時間範圍。存放在全域性資料區的變數的生存週期存在於整個程式執行期間,而存放在棧中的資料則隨著函式等的作用域結束導致出棧而銷毀,除了靜態變數之外的區域性變數都存放於棧中。作用域 變數的可見 域 塊作用域,函式作用域,類作用域,程式全域性作用...