java - c/c++ 指針指向 數(shù)組和數(shù)據(jù)類型 判斷時(shí)會(huì)不會(huì)有二義性?
問題描述
int dd=1;int *a=ⅆ // 1int *c=new int[2]; //2這里1說(shuō)明a是int 類型的指針,2說(shuō)明c是int數(shù)組類型的指針.對(duì)不?這段數(shù)據(jù)結(jié)構(gòu)代碼
兩個(gè)理解:1.rowlist是個(gè)動(dòng)態(tài)數(shù)組指向一大塊內(nèi)存,數(shù)組里的元素存儲(chǔ)著指向LinkList<int>鏈表的地址。即rowlist是指針數(shù)組。如圖一
2.rowlist指向一個(gè)內(nèi)存,這個(gè)內(nèi)存存儲(chǔ)著<LinkList< int > * >類型的指針,即rowlist是指針的指針。如圖二
感覺兩個(gè)都可以,是要看具體實(shí)現(xiàn)嗎。比如rowlist=new ...是采用第一種?
問題解答
回答1:int dd=1;int *a=ⅆ // 1int *c=new int[2]; //2
題主說(shuō):
這里1說(shuō)明a是int 類型的指針,2說(shuō)明c是int數(shù)組類型的指針.對(duì)不?
并不是這樣的,a和c其實(shí)是同一個(gè)東西,他們是指向int的指針。c并不是“int數(shù)組類型的指針”。
為什么c本來(lái)是一個(gè)int指針,但實(shí)際上它卻可以指向一個(gè)int數(shù)組呢?因?yàn)閕nt數(shù)組賦值給int指針的時(shí)候,C語(yǔ)言偷偷把它(int數(shù)組)轉(zhuǎn)換成了該int數(shù)組的首元素,這個(gè)“偷偷轉(zhuǎn)換”的專業(yè)名詞叫“隱式轉(zhuǎn)換”。
所以總結(jié)一下:
變量c不是int數(shù)組類型的指針,而是int類型的指針;
那為什么變量c竟然可以指向int數(shù)組呢,是因?yàn)槠渲邪l(fā)生了隱式轉(zhuǎn)換;
回答2:int *c=new int[2]; //2
c就是指向int的指針。指向數(shù)組的指針應(yīng)該寫成
int (*c)[2]=new int[2];
指針+1 會(huì)走幾個(gè)字節(jié)呢?試一試。
相關(guān)文章:
1. android - NavigationView 的側(cè)滑菜單中如何保存新增項(xiàng)(通過(guò)程序添加)2. tp5 不同控制器中的變量調(diào)用問題3. 微信小程序可以用gulp,webpack嗎?4. mysql服務(wù)無(wú)法啟動(dòng)1067錯(cuò)誤,誰(shuí)知道正確的解決方法?5. ueditor上傳服務(wù)器提示后端配置項(xiàng)沒有正常加載,求助!!!!!6. python - 為什么正常輸出中文沒有亂碼,zip函數(shù)之后出現(xiàn)中文編程unicode編碼的問題,我是遍歷輸出的啊。7. 老師 我是一個(gè)沒有學(xué)過(guò)php語(yǔ)言的準(zhǔn)畢業(yè)生 我希望您能幫我一下8. 這段代碼既不提示錯(cuò)誤也看不到結(jié)果,請(qǐng)老師明示錯(cuò)在哪里,謝謝!9. php7.3.4中怎么開啟pdo驅(qū)動(dòng)10. 提示語(yǔ)法錯(cuò)誤語(yǔ)法錯(cuò)誤: unexpected ’abstract’ (T_ABSTRACT)
