C C static使用(基於VS2010)

2021-06-20 11:21:50 字數 2414 閱讀 9583

(一)在c語言中

靜態變數永遠只能初始化一次(執行時),但是可以多次賦值,

靜態變數的記憶體位址在編譯後就確定了。

(1)區域性靜態變數,存在於全域性資料區

example1:

#include int function()

int main()

}

輸出結果為11,12,13,14,15,16,17,18,19,20

紅色為定義,只定義一次。實現機制:為a記錄乙個是否初始化的狀態,看看彙編就知道了。

example2:

#include int function()

int main()

}

輸出結果為:1,1,1,1,1,1,1,1,1,1

紅色同樣為定義;但綠色為賦值不是定義。

(2)全域性靜態變數:存在於全域性資料區

全域性靜態變數具有檔案屬性,只屬於定義它的編譯單元。

example1:

static int aaa = 10;

static int aaa = 20;

不會有鏈結錯誤,但如果把static去掉那便有鏈結錯誤了

(3)全域性靜態函式:

具有檔案屬性,全域性變數同

(二)在c++中

(1)同c部分略

(2)static成員變數:有時需要全域性物件,但全域性物件破壞封裝,而且容易發生衝突。所以用static成員變數。

#ifndef _test_h_

#define _test_h_

class ctest

~ctest()

static int getaaa()

public:

static int aaa;

};#endif

#include "test.h"

#include using namespace std;

int main()

鏈結錯誤。

需要對靜態成員變數進行初始化,初始化方式與static const成員變數相同:

#ifndef _test_h_

#define _test_h_

class ctest

~ctest()

static int getaaa()

public:

static int aaa;

};int ctest::aaa = 10;

#endif

b.static資料成員可以是該成員所述的類型別。非static成員被限定宣告為其自身類物件的指標和引用。

class ctest;

class ctest

~ctest(){}

public:

static ctest test1;//ok

ctest* test2;//ok

ctest test3;//ok

}

c.static資料成員可用作預設實參:

#ifndef _test_h_

#define _test_h_

class ctest

~ctest()

static int getaaa()

void seta(int para = aaa)//ok,注意必須對aaa先進行初始化

public:

int a;

static int aaa;

};int ctest::aaa = 10;

#endif

(3)靜態成員函式

a.靜態成員函式沒有this形參,也就說沒法操作具體物件,所以靜態成員函式只能操作不屬於任何物件的static成員變數。

b.靜態成員函式不能被宣告為const。因為const是由指向const物件的const指標來實現的,but you know靜態成員函式是不能操作具體物件的,因為它沒有this指標作為其形參。

c.靜態成員函式不能被宣告為虛函式。虛函式存在的意義就是執行時多型,實現的機制是根據不同的物件呼叫不同的成員方法,靜態成員宣告為虛函式沒意義。

10進製VS2進製

對於乙個十進位制數a,將a轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數b,我們乘b為a的二進位制逆序數。例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。乙個1000位 即10 999 以內的...

65 題目1208 10進製 VS 2進製

題目描述 對於乙個十進位制數a,將a轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數b,我們乘b為a的二進位制逆序數。例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。輸入 乙個1000位 即10...

機試 10進製 VS 2進製

對於乙個十進位制數a,將a轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數b,我們乘b為a的二進位制逆序數。例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。乙個1000位 即10 999 以內的...