java - c/c++ 指针指向 数组和数据类型 判断时会不会有二义性?
天蓬老师
天蓬老师 2017-04-18 10:53:58
0
2
736
int dd=1;
int *a=ⅆ    // 1
int *c=new int[2];  //2

这里1说明a是int 类型的指针,2说明c是int数组类型的指针.对不?

这段数据结构代码

两个理解:
1.rowlist是个动态数组指向一大块内存,数组里的元素存储着指向LinkList<int>链表的地址。即rowlist是指针数组。如图一

2.rowlist指向一个内存,这个内存存储着<LinkList< int > * >类型的指针,即rowlist是指针的指针。如图二

感觉两个都可以,是要看具体实现吗。比如rowlist=new ...是采用第一种?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(2)
伊谢尔伦
int dd=1;
int *a=&dd;    // 1
int *c=new int[2];  //2

題主說:

這裡1說明a是int 類型的指針,2說明c是int數組類型的指針.對不?

並不是這樣的,a和c其實是同一個東西,他們是指向int的指標。 c並不是「int數組類型的指標」。

為什麼c本來是一個int指針,但實際上它可以指向一個int數組呢?因為int數組賦值給int指標的時候,C語言偷偷把它(int數組)轉換成了該int數組的首元素,這個「偷偷轉換」的專業名詞叫做「隱式轉換」。

所以總結一下:

  1. 變數c不是int數組類型的指針,而是int型別的指針;

  2. 那為什麼變數c竟然可以指向int數組呢,是因為其中發生了隱式轉換;

洪涛
int *c=new int[2];  //2

c就是指向int的指標。指向陣列的指標應該寫成

int (*c)[2]=new int[2];

指針+1 會走幾個位元組呢?試一試。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!