int main()
{
char *p = "ayqm";
char c;
c = ++*p++;
printf("%c",c);
}
「c」と表示されるべきだと思ったのですが、「b」と表示されます。説明してください。
これは、演算子の優先順位によるものです。後置演算子は、逆参照された値ではなく、ポインター++
を増加させます。
したがって、式は'a'
、接頭辞の増加によって増加した最初のものを返します'b'
が、上記の演算子の優先順位により、接尾辞の増加は実際にはポインター用です。
ここでは接尾辞が最も優先されますが、ステートメントの後の値にのみ影響します。++ と * の優先順位は同じで、右結合性があります。そこでは、次のように機能します。
*p -> に評価されます
++'a' は 'b' に評価されます