C 基礎 static的用法

2021-10-01 14:17:03 字數 1967 閱讀 4448

首先,看看變數的儲存:

int

global ;

intmain()

變數global儲存在全域性資料儲存區,stackstore儲存在棧中,heapstore儲存在堆中;

static作為靜態修釋符用法:

1.static可以用來修飾變數,也可以用來修飾函式,其用法相似;

2. static可以靜態的呈現乙個變數,在作用範圍內不會改變變數的值;

3. 但是如果函式的區域性變數複寫了變數的值,那麼這個值在當前區域性函式內有效; 若出了當前區域性範圍,static的值生效;

例一, static在全域性範圍內,用include擴充套件static的作用範圍, 用extern擴充套件函式的作用域:

107.h

#ifndef _107h_

#def _107h_

extern voidfunc();

#endif

107.cpp

#include "stdafx.h"#include #include #include "107.h"voic func() 

108.h

#ifndef _108h_

#def _108h_

extern voidfunc1();

#endif

108.cpp

#include "stdafx.h"#include #include #include "108.h"voic func1() 

109.cpp

#include "stdafx.h"#include #include #include "107.h"#include "108.h" intmain() 

輸出結果為:

例二,static在當前文字作用域,用extern擴充套件函式的作用域:

file1.h

#ifndef _file1_

#define _file1_

extern

void

func1();

extern

void

func2();

#endif

file1.cpp

#include "stdafx.h"

#include #include #include "file1.h"

static char* hello = "hello world!";

void func1()

void func2()

file2.cpp

#include "

stdafx.h

"#include

#include

#include

"file1.h

"int

main()

輸出結果:

!!! 若將static char* hello = "hello world!"放入func1, 如下;

file1.cpp

#include "

stdafx.h

"#include

#include

#include

"file1.h

"void

func1()

void

func2()

那就會出錯,錯誤為:

C中 static 的用法

對於函式而言,僅僅為隱藏作用。對於變數而言,1 隱藏 2 可以保持變數內容的持久,因為static變數儲存在靜態儲存區只在程式的剛開始完成初始化,唯一的一次初始化 即使在子函式中作靜態變數 若未賦值,則系統自動賦予0值。為自動區域性變數不賦初值的話,其值不定。當編譯多個檔案時,所有未加static字...

C 靜態static的用法

一 靜態類 靜態類與非靜態類的重要區別在於靜態類不能例項化,也就是說,不能使用 new 關鍵字建立靜態類型別的變數。在宣告乙個類時使用static關鍵字,具有兩個方面的意義 首先,它防止程式設計師寫 來例項化該靜態類 其次,它防止在類的內部宣告任何例項欄位或方法。靜態類的主要特性 1 僅包含靜態成員...

c語言 static的用法

static在c裡面可以用來修飾變數,也可以用來修飾函式。先看用來修飾變數的時候。變數在c裡面可分為存在全域性資料區 棧和堆裡。其實我們平時所說的堆疊是棧而不是堆,不要弄混。int a int main a是全域性變數,b是棧變數,c是堆變數。static對全域性變數的修飾,可以認為是限制了只能是本...