1、工作現場**:
[cpp]view plain
copy
print?
typedef mydata
* lpmydata;
const lpmydata pdata = getdata();
// do sth else
pdata = getnewdata(); // compile error
typedef mydata
* lpmydata;
const lpmydata pdata = getdata();
// do sth else
pdata = getnewdata(); // compile error
2、分析:
a、首先我們應該都知道const的使用方法,一些面試題也都喜歡考察這個問題,比如 const char* 和 char const* 和char * const有什麼區別。
前兩個是等價的,const在指標前面則指標指向的實際記憶體區域不可修改,const在指標後面,則指標本身不可修改。如果前後都有則都不可修改。
b、雖然我不喜歡在c++**中用這種typedef來定義結構,但是上面這種typedef用法是沒有什麼問題的。但是為什麼無法給pdata進行第二次賦值? pdata為什麼變成不可修改的常量了?
3、結論:
typdef *** *p***; 經過這種typedef後,p***已經是乙個整體型別,而不是乙個普通的define形式的字串替換。 按照上面的分析,const char*和char const*是完全等價的,也就是說對於編譯器而言,const在型別前後是等價的。於是const lpmydata就等價於lpmydata const。 這個時候再看,const lpmydata pdata;這句話在編譯器理解應該是這樣的:
[cpp]view plain
copy
print?
mydata* const pdata;
mydata* const pdata;
這樣就可以看到,const修飾的確實是指標本身。那上面編譯不過的那句就可以理解了。
這個問題雖然比較隱晦,但是確實是我們工作中容易犯的錯誤,犯這個錯誤也可以反映出基本功還不夠紮實。
乙個基礎但是隱晦的c 語法問題
1 工作現場 typedef mydata lpmydata const lpmydata pdata getdata do sth else pdata getnewdata compile error 2 分析 a 首先我們應該都知道const的使用方法,一些面試題也都喜歡考察這個問題,比如 c...
乙個基礎問題
用sql server設計了乙個表,其中有乙個人的身份證的資訊,我想以身份證號為主鍵,可以嗎?可是網上看到的資料說,主鍵不應該人為給定的,應該由計算機自動生成,貌似就是自增的意思。可以用身份證號碼作為主鍵,反正不會出現衝突就好了。網上的說法,或許只是建議使用自增列作為主鍵。遇到乙個結論,思考一下為什...
C 基礎語法及第乙個C 程式
tips 1.本人當初學習c c 的記錄。2.資源很多都是來自網上,如有版權請及時告知!3.可能會有些錯誤。如有看到,希望能指出,以此共勉!c 關鍵字 資料型別 變數型別 常量 第乙個c 程式 auto double inline short typeid bool dynamic cast int...