簡單介紹
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]
的存儲結構如下:數組指針是元素單元大小是確定的,但是指針的個數是不確定的。
運算符優先級