從運算子優先順序看指標陣列和陣列指標

2021-07-11 18:06:46 字數 852 閱讀 9227

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]的儲存結構如下:

陣列指標是元素單元大小是確定的,但是指標的個數是不確定的。

運算子優先順序

運算子優先順序 C 運算子優先順序

c 運算子優先順序 優先順序運算子 描述方向1 scope resolution 範圍解析 left to right 2 suffix postfix increment and decrement 字首 字尾遞增和遞減 function call 函式呼叫 array subscripting ...

運算子優先順序 Python 運算子優先順序

python 運算子優先順序 運算子描述 lambda lambda表示式 or布林 或 and布林 與 not x 布林 非 in,not in 成員測試 is,is not 同一性測試 比較 按位或 按位異或 按位與 移位 加法與減法 乘法 除法與取餘 x,x 正負號 x 按位翻轉 指數 x.a...

運算子優先順序 PHP運算子優先順序

php運算子優先順序 結合方向 運算子附加資訊 非結合clone new clone 和 new左 array 非結合 遞增 遞減運算子 非結合 int float string array object bool 型別非結合 instanceof 型別右結合 邏輯操作符 左 算術運算子 左 算術運...