java - c/c++ 指針指向 數(shù)組和數(shù)據(jù)類型 判斷時(shí)會(huì)不會(huì)有二義性?
問題描述
int dd=1;int *a=ⅆ // 1int *c=new int[2]; //2這里1說明a是int 類型的指針,2說明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
題主說:
這里1說明a是int 類型的指針,2說明c是int數(shù)組類型的指針.對(duì)不?
并不是這樣的,a和c其實(shí)是同一個(gè)東西,他們是指向int的指針。c并不是“int數(shù)組類型的指針”。
為什么c本來是一個(gè)int指針,但實(shí)際上它卻可以指向一個(gè)int數(shù)組呢?因?yàn)閕nt數(shù)組賦值給int指針的時(shí)候,C語言偷偷把它(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. java - Oracle如何獲取去重結(jié)果集中某一條數(shù)據(jù)的下一條數(shù)據(jù)2. 致命錯(cuò)誤: Class ’appfacadeTest’ not found3. dockerfile - 為什么docker容器啟動(dòng)不了?4. python - 數(shù)據(jù)無法插入到mysql表里5. android - Apk 中找不到r類文件6. javascript - 求正則表達(dá)式的寫法7. javascript - 小程序跳轉(zhuǎn)失敗?8. npm install -g browser-sync這個(gè)之后出錯(cuò) 還有人嗎 我都感覺沒人回答問題了9. python - pyspider的分布式運(yùn)行成功,2臺(tái)slave跑,但是時(shí)間并沒有縮短問題?10. angular.js - 用requireJS模塊angularjs代碼時(shí)遇到一些問題
