C 語言中的靜態變數
Jinku Hu
2023年10月12日
本文將演示關於如何在 C 語言中使用靜態變數的多種方法。
在 C 語言中使用 static
變數在函式呼叫之間儲存變數值
static
關鍵字在多種情況下使用,其中之一是宣告在函式呼叫之間將其值保留在記憶體中的變數。這種型別的變數有一個靜態的儲存期限。
在下面的例子中,我們在一個函式塊作用域中宣告一個變數 k
。當控制流離開 up
函式時,k
的值會在記憶體中持續存在,直到程式退出。可以利用這種行為在程式執行過程中持久地儲存資料物件。
請注意,如果我們不顯式初始化靜態變數,它們會自動初始化為 0。
#include <stdio.h>
#include <stdlib.h>
static int j = 0;
void up(void) {
static int k = 0;
j++;
k++;
printf(" up() called. k=%2d, j=%2d\n", k, j);
}
int main() {
int i;
for (i = 0; i < 3; i++) up();
exit(EXIT_SUCCESS);
}
輸出:
up() called. k= 1, j= 1
up() called. k= 2, j= 2
up() called. k= 3, j= 3
在 C 語言中使用 static
關鍵字來宣告檔案範圍內的變數
static
限定變數可以在任何函式外宣告,使其在單個原始檔範圍內可見。這樣的變數稱為具有內部聯絡的靜態變數,也就是說它們的值只能被同一檔案中的函式使用。
注意,這兩個函式都將名為 k
的區域性變數初始化為零,但當 down
函式被呼叫時,變數 k
(在 up
中宣告)不在同一範圍內,在不同的記憶體位置初始化了一個新的變數。因此,兩次迭代後顯示負值。注意,函式引數不能有 static
限定符。
#include <stdio.h>
#include <stdlib.h>
static int j = 0;
void up(void) {
static int k = 0;
j++;
k++;
printf(" up() called. k=%2d, j=%2d\n", k, j);
}
void down(void) {
static int k = 0;
j--;
k--;
printf("down() called. k=%2d, j=%2d\n", k, j);
}
int main() {
int i;
for (i = 0; i < 3; i++) up();
for (i = 0; i < 2; i++) down();
exit(EXIT_SUCCESS);
}
輸出:
up() called. k= 1, j= 1
up() called. k= 2, j= 2
up() called. k= 3, j= 3
down() called. k=-1, j= 2
down() called. k=-2, j= 1