static和const和define關鍵字比較

2021-10-13 00:21:05 字數 1701 閱讀 3453

一般記憶體主要分為: **區、 常量區、 靜態區(全域性區)、 堆區、 棧區 這幾個區域

大小端測試:資料在記憶體中存放,有大端模式和小端模式

小端模式(little-endian):低位位元組存放在低位址上,高位位元組存放在高位址上

大端模式(big-endian):低位位元組存放在高位址上,高位位元組存放在低位址上。

網路位元組序:tcp/ip各層協議將位元組序定義為big-endian, 因此tcp/ip協議中使用的位元組序通常稱之為網路位元組序

static uint32_t m=0x87654321;

char *p=(char*)&m;

void test(void)

如果結果為 *p        : 21

*(p+1)    " 43        

*(p+2)    " 65

*(p+3)    " 87

則為小端模式相符合!

static關鍵字:

1 static 修飾區域性變數

修飾區域性變數時 修改其儲存位置 儲存到靜態區。作用域未修改。  生存週期修改為程式結束才銷毀 

2 static 修飾全域性變數

修飾全域性變數時 未改變儲存位置。 作用域修改, 僅當前檔案可見。 生存週期未修改

3 static 修飾成員變數

修飾成員變數時 靜態成員屬於類不屬於類物件 需要在類外初始化

4 static 修飾成員函式

修飾成員函式時 靜態函式屬於類不屬於類物件 需要通過類作用域呼叫 函式無this指標(靜態成員函式僅能訪問靜態的資料成員,不能訪問非靜態的資料成員,也不能訪問非靜態

的成員函式)

const關鍵字:

1 const修飾定義乙個變數為常量 (cosnt int a = 10;)

2 const修飾指標 const t* p 指p指向的變數記憶體不能改變  t* const p 指變數p不能改變

3 const修飾類成員函式 可以使用類中成員變數但是不能改變成員變數的值也稱為常成員函式 (void func() const;)

4 const修飾成員變數 只能通過初始化列表初始化 

5 const修飾函式返回值  const 修飾自定義型別的作為返回值, 此時返回的值不能作為左值使用, 既不能被賦值,也不能被修改.

define優點:

(1)方便程式的修改:使用簡單巨集定義可以代替乙個在程式中經常使用的常量,這樣在常量改變時不需要對程式進行其他修改

(2)提高程式的執行效率:使用帶引數的巨集定義可以完成函式呼叫的功能,能減少系統開銷,提高執行效率。因為其在編譯時直接展開減少函式呼叫的開銷

const和define的區別

1 define是預編譯指令,const是普通變數的定義,define定義的巨集是在預處理階段展開的,而const定義的唯讀變數在編譯執行階段使用

2 const定義的是變數,巨集定義的是常量。    define定義的巨集在編譯後就不存在了,其不占用記憶體,因為它不是變數,系統只會為變數分配記憶體。const定義的常變數任然是乙個變數,具有變數的基本屬性,有型別、占用儲存單元。

3 const定義的是變數,所以其有資料型別編譯器編譯時能進行引數檢查。而巨集只是預處理是簡單的展開,沒有安全檢查,容易出現括號問題

mutable關鍵字:

mutable為可變的,易變的跟c++中的vonst是反義詞。被mutable修飾的變數(mutable智慧型用於修飾類的非靜態資料成員),將永遠處於可變的狀態, 即使在乙個const函式中

const成員 和 static成員

1.const成員變數 2.const成員函式 3.static成員變數 4.static成員函式 純手敲,給自己加深印象 1.const成員變數 必須在建構函式初始值列表進行初始化,或者申明const成員變數為static,可在類內初始化 class account void show priva...

static和const的使用

static 檔案域 位置域 區域性,類 在乙個類中宣告了,在類外定義,static變數定義時所在的檔案,就構成了該變數的作用範圍。乙個類的static變數,如果在標頭檔案中定義,多個其他檔案include這個檔案的時候,就會使得這個static有多個實體。也就是乙個類定義了多個static變數,然...

const和static的使用

const和static的使用 使用const。這一點在很多經典的關於c 和c 的書籍中是必談的要點。在 exceptional c 一書中,對這點有很精彩的描述,現摘錄如下 沒有正確的安全意識的槍手在世界上是不可能活的很長的。const 觀念不正確的程式設計師也是一樣和沒有時間戴緊帽子的正確,沒有...