指標和運算子優先順序

2021-08-08 21:22:20 字數 1398 閱讀 1272

使用未初始化的指標會帶來非常大的風險。0:null/nullptr,nullptr可隱式轉為bool

char *p=建立乙個以\0終止的字串字面值。p為第乙個字元的位址。

注意:指向char型別的指標,輸出方式以一種特殊的方式來解析這類指標——將p對應位置開始一直到結束都會輸出,即p輸出字串本身,而不是字串的位址,但*p仍是第乙個字元

char *p="stra";

while(i<3)

2.(),,.,->

3.++,--,typeid,explicit_cast

4.++,--,~,!,-,+,\*,&,(),sizeof

5.sizeof,new,delete,noexcept

6.->\*,.\*

7.*,/,%

8.+,-

9.<<,>>

10.<,>,<=,>=

11.==,!=

12.&

13.^

14.|

15.&&

16.||

17.?:

18.=

19.*=,/=,%=,+=,-=,<<=,>>=,&=,|=,^=

20.throw

21.,

char (*p)[3]故p與p+1的差距為sizeof(char p[3])

char p[3]p與p+1的差距為sizeof(char),而&p與&p+1差距為sizeof(p),其中:

例如:

char (*p)[10];

char a[10];

p=&a;

若p=&a改為p=a則會報出如下錯誤:指標型別不相容賦值。

&a和a的右值雖然相等,但型別不匹配,從而導致sizeof(型別)大小不同

二維陣列

char[3][2]:看成具有3個元素的一維陣列: char (*p)[2]=a可以換成: auto p=a

三維陣列

char[3][4][2]:看出一維陣列

多級指標

故char*p可用char**p表示。

int &*p(此用法非法)

int* &p:首先p是乙個引用,引用的型別為整型指標。即給指標取乙個別名。

從而上述說明了b[i][j]等價於*(*(b+i)+j)或*(b[i]+j)或*(b+i)[j]

陣列引用:與指標用法的區別

int a[10];

int (&b)[10]=a;

運算子優先順序 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 型別右結合 邏輯操作符 左 算術運算子 左 算術運...