首先,回顧一下關於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 清除...