java - c/c++ 指針指向 數(shù)組和數(shù)據(jù)類型 判斷時會不會有二義性?
問題描述
int dd=1;int *a=ⅆ // 1int *c=new int[2]; //2這里1說明a是int 類型的指針,2說明c是int數(shù)組類型的指針.對不?這段數(shù)據(jù)結(jié)構(gòu)代碼

兩個理解:1.rowlist是個動態(tài)數(shù)組指向一大塊內(nèi)存,數(shù)組里的元素存儲著指向LinkList<int>鏈表的地址。即rowlist是指針數(shù)組。如圖一
2.rowlist指向一個內(nèi)存,這個內(nèi)存存儲著<LinkList< int > * >類型的指針,即rowlist是指針的指針。如圖二

感覺兩個都可以,是要看具體實現(xiàn)嗎。比如rowlist=new ...是采用第一種?
問題解答
回答1:int dd=1;int *a=ⅆ // 1int *c=new int[2]; //2
題主說:
這里1說明a是int 類型的指針,2說明c是int數(shù)組類型的指針.對不?
并不是這樣的,a和c其實是同一個東西,他們是指向int的指針。c并不是“int數(shù)組類型的指針”。
為什么c本來是一個int指針,但實際上它卻可以指向一個int數(shù)組呢?因為int數(shù)組賦值給int指針的時候,C語言偷偷把它(int數(shù)組)轉(zhuǎn)換成了該int數(shù)組的首元素,這個“偷偷轉(zhuǎn)換”的專業(yè)名詞叫“隱式轉(zhuǎn)換”。
所以總結(jié)一下:
變量c不是int數(shù)組類型的指針,而是int類型的指針;
那為什么變量c竟然可以指向int數(shù)組呢,是因為其中發(fā)生了隱式轉(zhuǎn)換;
回答2:int *c=new int[2]; //2
c就是指向int的指針。指向數(shù)組的指針應(yīng)該寫成
int (*c)[2]=new int[2];
指針+1 會走幾個字節(jié)呢?試一試。
相關(guān)文章:
1. javascript - sublime快鍵鍵問題2. javascript - immutable配合react提升性能?3. Apache 已經(jīng)把網(wǎng)站根目錄的改為allow from all了,但是服務(wù)器還是不能訪問?4. javascript - nodejs關(guān)于進(jìn)程間發(fā)送句柄的一點疑問5. css - 寫頁面遇到個布局問題,求大佬們幫解答,在線等,急!~6. 實現(xiàn)bing搜索工具urlAPI提交7. javascript - 移動端上不能實現(xiàn)拖拽布局嗎?8. vue.js - Vue 如何像Angular.js watch 一樣監(jiān)聽數(shù)據(jù)變化9. 配置Apache時,添加對PHP的支持時語法錯誤10. phpstudy8.1支持win11系統(tǒng)嗎?

網(wǎng)公網(wǎng)安備