C C 中static的使用

2021-06-16 15:01:11 字數 2296 閱讀 9297

最近在看

c++

,總是不斷的遇到關鍵字static,對此關鍵字不是很了解,每次遇到都有些困惑,不知道此處為啥要用static,今日通過網上一些資料,仔細認真的了解了

static

的用法。

static的在好多程式語言中存在,那他在

c++中出現的原因是什麼呢?換句話說就是在

c++中什麼時候需要使用到

static

。函式內部定義的變數,在程式執行到他的定義處時,編譯器在棧上為他分配空間。函式在棧上分配的空間在此函式執行結束時會釋放掉,因此就出現了這樣乙個問題:如何將函式中此變數的值儲存到下一次呼叫?一般我們會想到的方法是使用全域性變數,定義全域性變數有很多不好的缺點,最明顯的是破壞了此變數的訪問範圍(該變數不僅僅受此函式的控制,其他的函式也可以呼叫他),同時定義全域性變數會使得程式的可讀性變差,而且容易出錯,因此能不定義全域性變數就盡量不要定義全域性變數。

首先我們來說說

static的特殊之處。對於乙個完整的程式,其在記憶體中的分布情況如下圖:

**區(低位址)

全域性資料區 堆區

棧區(高位址)

一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數會隨著函式的退出釋放空間。而加了關鍵字

static的靜態資料存放在全域性資料區,全域性資料區的資料不會因為函式的退出而釋放空間。

static

c++中根據他是在類中使用還是不在類中使用來兩種使用情況,首先我們來說說在非類中的情況,即面向過程的

static

面向過程的

static

1.

靜態全域性變數

在全域性變數之前家上關鍵字

static,該變數就被定義為靜態全域性變數。靜態全域性變數在宣告他的整個檔案中是可見,在檔案之外是不可見。因此在其他檔案中可以定義相

同名字的變數而不會引起衝突。即使在其他檔案中使用extern宣告也不能起作用。

example1.cpp
#include #include "example2.h"

using namespace std;

static int n; //定義靜態全域性變數

void fun();

int main()

void fun()

void fun() //定義靜態函式

;int myclass::sum = 0; //定義並初始化靜態資料成員

myclass::myclass(int x,int y,int z)

void myclass::getsum()

;int myclass::sum = 0; //定義並初始化靜態資料成員

myclass::myclass(int x,int y,int z)

void myclass::getsum() //靜態成員函式的實現

{ //cout<

根據使用

static關鍵字的成員都是儲存在全域性資料區這個特性,可以總結

static關鍵字有如下幾種使用情況:

首先是隱藏,使用關鍵字

static是在乙個檔案中定義的內容不被其他檔案呼叫,同時可以防止在其他檔案中定義了相同名字的成員而引起衝突。(一般在定義全域性變數時會考慮這點,把全域性變數定義成靜態的)

當要保持函式中區域性變數的值的永續性,可以將區域性變數定義為靜態區域性變數。

當某個類的物件擁有相同的屬性時,可以將該屬性定義為靜態的,這樣該屬性只定義一次,不需要為每個物件都拷貝乙份,節省了空間。在物件導向的程式設計中巧妙的運用關鍵字

static可以起到優化程式的效果.

這些是我通過網上資料總結的內容,主要是加深自己對

static的理解,如果有不正確的地方,請大家斧正,不全面的請大家幫忙補充。如果能幫助你理解

static關鍵字,我表示很榮幸

通過了解原理才能更深刻的理解和運用。

c c 中static和extern使用

在c c 中static和extern都能夠用來修飾函式和變數,可是是有差別的。內部函式和內部變數 僅僅能在檔案內使用的函式和變數。外部函式和外部變數 可以被其他檔案使用的函式和變數。static 1 對函式 定義乙個內部函式 static void test 宣告乙個內部函式 static voi...

C C 中static的用法

c c 的static有兩種用法 面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函式,不涉及類 後者主要說明static在類中的作用。一 面向過程設計中的static 1 靜態全域性變數 在全域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態全域...

說說C C 中的static

c語言中的靜態 1 區域性 a.靜態區域性變數在函式內定義,生存期為整個源程式,但作用域與自動變數相同,只能在定義該變數的函式內使用。退出該函式後,儘管該變數還繼續存在,但不能使用它。b.對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。2 全...