從運算符優先級看指針數組和數組指針

簡單介紹

C/C++中的這兩種書寫方法實在是很像,但是它們的含義有很大的不同,所以一定要能清晰地辨別它們。

簡單地說,int *p[4]是指針數組,int(*p)[4]是指向數組的指針

指針數組:是一個元素全爲指針的數組;數組指針:可以理解爲指針,只是這個指針類型不是int而是int[4]類型的數組

int *p[4],p是一個指針數組,每一個指向一個int型的,等價於(int *) (p[4])

int (*p)[4],p是一個熱指針,指向int[4]的數組

通過運算符優先級來理解

上面的原因是,*(間接引用運算符) 的優先級低於 [] 的優先級。

首先看int *p[4],[] 的優先級高,所以塔首先是一個大小爲4的數組,即p[4],剩下的int * 作爲補充說明,即說明該數組的每一個元素爲指向一個整數類型的指針。int *p[4]的存儲結構如下:

指針數組的數組元素的大小是不確定的,但是指針的個數是確定的。

再看int (*p)[4]。它首先是一個指針,即 *p,剩下的 int[4] 作爲補充說明,即說明指針p 是指向一個長度爲4的數組。int (*p)[4]的存儲結構如下:

數組指針是元素單元大小是確定的,但是指針的個數是不確定的。

運算符優先級


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章