C 語言中的靜態變數

Jinku Hu 2023年10月12日
  1. 在 C 語言中使用 static 變數在函式呼叫之間儲存變數值
  2. 在 C 語言中使用 static 關鍵字來宣告檔案範圍內的變數
C 語言中的靜態變數

本文將演示關於如何在 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
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook