java - c/c++ 指針指向 數組和數據類型 判斷時會不會有二義性?
問題描述
int dd=1;int *a=ⅆ // 1int *c=new int[2]; //2這里1說明a是int 類型的指針,2說明c是int數組類型的指針.對不?這段數據結構代碼
兩個理解:1.rowlist是個動態數組指向一大塊內存,數組里的元素存儲著指向LinkList<int>鏈表的地址。即rowlist是指針數組。如圖一
2.rowlist指向一個內存,這個內存存儲著<LinkList< int > * >類型的指針,即rowlist是指針的指針。如圖二
感覺兩個都可以,是要看具體實現嗎。比如rowlist=new ...是采用第一種?
問題解答
回答1:int dd=1;int *a=ⅆ // 1int *c=new int[2]; //2
題主說:
這里1說明a是int 類型的指針,2說明c是int數組類型的指針.對不?
并不是這樣的,a和c其實是同一個東西,他們是指向int的指針。c并不是“int數組類型的指針”。
為什么c本來是一個int指針,但實際上它卻可以指向一個int數組呢?因為int數組賦值給int指針的時候,C語言偷偷把它(int數組)轉換成了該int數組的首元素,這個“偷偷轉換”的專業名詞叫“隱式轉換”。
所以總結一下:
變量c不是int數組類型的指針,而是int類型的指針;
那為什么變量c竟然可以指向int數組呢,是因為其中發生了隱式轉換;
回答2:int *c=new int[2]; //2
c就是指向int的指針。指向數組的指針應該寫成
int (*c)[2]=new int[2];
指針+1 會走幾個字節呢?試一試。
相關文章:
1. macOS Sierra 10.12 安裝mysql 5.7.1出現錯誤2. mysql - 拖拽重排序后怎么插入數據庫?3. android - 安卓做前端,PHP做后臺服務器 有什么需要注意的?4. javascript - 天貓首頁首屏數據來源5. mysql 獲取時間函數unix_timestamp 問題?6. mysql - 僅僅只是把單引號與反斜杠轉義不用prepare statement能否避免sql注入?7. php - 生產環境下,給MySQL添加索引,修改表結構操作,如何才能讓線上業務不受影響?8. mysql主主同步,從庫不同步應該怎么解決?9. mysql在限制條件下篩選某列數據相同的值10. 新入手layuiadmin,部署到tp中。想用php自已寫一個后臺管理系統。
