C 中的static用法小結

2021-07-11 13:51:40 字數 1048 閱讀 7131

static定義靜態全域性變數時:

1. 未初始化的靜態全域性變數被程式自動賦為0,(好像不加static程式也會自動設為0,函式內部定義的變數如果不初始化就使用就會出錯,程式不會自動賦值)

2. 靜態全域性變數對工程裡面的其他檔案來說是不可用的,也就是乙個全域性變數變成靜態全域性變數之後,其他檔案可以定義相同名字的變數,而不會發生衝突,所以靜態全域性變數有向其他檔案隱藏該變數的功能。

(這裡主要看了zzhays的專欄之後自己總結了一下)

main1.cpp

#include

using namespace std;

static int a;//如果這裡的a是static型別的,那麼這個變數在main.cpp是不可見的,對其他檔案隱藏了這個變數,初始化時是0

void fun();

void main()

{a++;

coutcout#include

using namespace std;

// int a=3;

extern int a;//如果這裡不加extern的話,前面的static也沒有的話,就會發生重定義的符號的問題;因為前面有static,所以a在這個檔案裡是不可用的,可以定義同樣名字的變數

void fun()

{a++;

cout《上面的這個例子有兩個檔案,執行程式發現不可行,那是因為a在main1.cpp裡是靜態的,所以main.cpp不可以引用a(我是這麼理解的)

把main1.cpp裡面的static去掉,程式就可以正常執行了

static定義靜態區域性變數時:

1. 靜態區域性變數具有區域性作用域,它只被初始化一次,自從第一次被初始化直到程式執行結束都一直存在,它和全域性變數的區別在於全域性變數對所有的函式都是可見的,而靜態區域性變數只對定義自己的函式體始終可見。

從分配記憶體空間看:

全域性變數,靜態區域性變數,靜態全域性變數都在靜態儲存區分配空間,

而區域性變數在棧裡分配空間。 從以上分析可以看出, 把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。

C語言static用法小結

static關鍵字是c,c 中都存在的關鍵字,它主要有三種使用方式,其中前兩種只指在c語言中使用,第三種在c 中使用 c,c 中具體細微操作不盡相同,本文以c 為準 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 下面就這三種使用方式及注意事項分別說明 一 區域性靜態變數 在...

static用法小結

static關鍵字是c,c 中都存在的關鍵字,它主要有三種使用方式,其中前兩種只指在c語言中使用,第三種在c 中使用 c,c 中具體細微操作不盡相同,本文以c 為準 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 下面就這三種使用方式及注意事項分別說明 一 區域性靜態變數 在...

static用法小結

static關鍵字是c,c 中都存在的關鍵字,它主要有三種使用方式,其中前兩種只指在c語言中使用,第三種在c 中使用 c,c 中具體細微操作不盡相同,本文以c 為準 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 下面就這三種使用方式及注意事項分別說明 一 區域性靜態變數 在...