2
int main()
{
char arr[] = "geeksforgeeks";
char *ptr = arr;
while(*ptr != '\0')
++*ptr++;
printf("%s %s", arr, ptr);
getchar();
return 0;
}
while循環++ptr++
中的語句的行爲方式我不明白。後增量應該首先被評估,因爲它的優先級高,並且第一個輸出值應該是f(遞增e)。但是這並沒有發生。爲了理解我將聲明更改爲++*(ptr++)
,所以它可能會給出我期望的輸出(ffltgpshfflt是我期望的輸出;但實際輸出hffltgpshfflt)。但是輸出不會改變。 ()運算符的優先級高於預增加的優先級。但爲什麼產量不變呢?c中的前綴和後綴的優先級和關聯性
謝謝。但是在表達式++ * ++ ptr中,首先會發生++ ptr。 ptr移動到下一個位置,並且當推定值是'e'時,預先遞增我們得到'f'。這繼續,最後null值也被改變。但是輸出gffltgpshfflt怎麼樣? – 2014-12-04 10:50:02
如果您指的是最初的'g'來自哪裏,它仍然是原始字符串。它沒有被修改,因爲'++ ptr'跳過了第一個字符。 'arr'仍然指向這個'g',因爲'arr'(指針)沒有改變。 – svinja 2014-12-04 13:25:57