關於const在深入一點

2021-06-16 04:02:33 字數 692 閱讀 4127

首先,回顧一下關於const的基礎知識;使用const型別的變數被它限制了。一般分幾種。。

第一種:const  char string=x(賦值);這個string變數的內容就不可以被改變,如果改變了編譯器就會報錯。

第二種: char * const p=x(賦值);//

指標常量--指標本身是常量,指向的位址不可以變化,但是指向的位址所對應的內容可以變化

第三種:const char*p=x(賦值)//

常量指標--指向字串常量,所指向的字串內容不能變,但是指向的位址可以變化

好我們接下來看個題目:

#include

int main()

咋一看肯定有人會說這個是錯誤的。

在仔細看還是會有人會說這個是錯誤的。

有人嘗試用編譯器試試,結果編譯器沒有報錯(說明這個是對的)

那為什麼呢?

首先看const char *c ="zhang"; 

這裡指標指向的zhang是不能被改變的(前面基礎有講)。

再是c = "bei"; 

這裡什麼變了??

有人會說zhang被改變為了bei

錯錯錯!!!!!

這裡只是指標指向的地方改變了,也就是指標變數的內容變了

原來的zhang字串裡面沒有乙個字元被改變。

就是這樣,你對const有沒有加深理解了呢!!!

關於const的一點小細節

1.假如函式引數為引用型別的話,那麼傳給它乙個常量會發生錯誤,這是我們都知道的事實。但是在初學 c 時我們可能會誤給它傳乙個字面值,如例 則會發生 main.cpp 14 error c2664 test 不能將引數1 從 int 轉換為 int 的錯誤。這是因為我們初學者經常會忽略字面值也是常量的...

readonly和Const注意一點

const 要求編譯時常量,所以不能跟new,其實也是static的 可以定義欄位和區域性變數 static readonly 執行時常量,可在靜態構造中進行賦值 只能字段 const 常量,在編譯時寫入元資料中,如果定義在另乙個dll中常量,一旦改變則必須更新被引用dll,且重新編譯當前dll。在...

select深入一點了

wsaewouldblock 操作沒有完成 正在執行中。待fd connect訊息 nread socket error nread 0 getlasterr wsaewouldblock 否則都是為斷開 非同步recv每次 接受的 字元不一定。有可能比較少。沒接受全 fd zero wfds 清除...