2014-03-07 113 views
1

對於指向字符串文字的指針的算術運算。

char *p="abcd"; 

我有以下代碼中的兩個語句

++*p; 

和第二個

*++p; 

這兩個都產生相同的結果,但有在途中的任何差這兩個是否實現?還請清除哪一個具有更高的優先級「++」或「*」。謝謝

+0

這兩個語句只是產生相同的值,因爲你初始化了'p'的特定字符串(並且因爲你的編譯器沒有發生分配標記爲只讀的內存中的字符串)。 – user2357112

+0

嘗試字符串「等等」,看看他們做**不**產生相同的結果。 –

+0

@ Cheersandhth.-Alf,但爲什麼它產生相同的結果 – YakRangi

回答

1

Precedence table

引用具有更高優先級的優先級表運算符將首先進行評估。

在您的情況下,您使用的前綴增量爲++,它與尊重運算符*具有相同的優先級。 所以當你有兩個在同一個表達式時應該考慮它的關聯性which is right to left

++ * p將等於++(* p)指針首先被置位,然後值遞增。

char *p="abcd"; 

*p等於a++上字符會給你b

* ++ p將爲相當於*(++ p)的指針被遞增第一然後deference'd

++p將指向b字符串中,然後再*尊重會給你b。在位置2

改變你的輸入字符串,你會得到不同的答案。你得到的同樣的答案正如第一個字符的操作與第二個操作匹配