私int ptr={10,20,30,40,50}
はそれを理解します
print("%d", *ptr++);
このようなステートメントでは、演算子の評価は右から左に行われます。したがって、*ptr++
最初++
に評価され、次に評価さptr
れ*
ます。同じことを確認するために、プログラムを作成しました。
#include<stdio.h>
int main()
{
int array[] = { 10, 20, 30, 40, 50 };
int *q1 = array;
printf("q1 = %p\n",q1);
printf("*q1++ = %d\n",*q1++);
printf("q1 = %p\n",q1);
printf("*q1++ = %d\n",*q1);
}
上記のプログラムの出力は、上記のロジックによって予想される演算子の優先順位とは異なります。私が得た出力は
q1 = 0x7ffffcff02e0
*q1++ = 10
q1 = 0x7ffffcff02e4
*q1++ = 20
しかし、私は期待していました
q1 = 0x7ffffcff02e0
*q1++ = 20
q1 = 0x7ffffcff02e4
*q1++ = 20
では、演算子の優先順位は右から左に発生しませんでしたか?それとも私の理解に何か問題がありますか?
アップデート
*(ptr ++)が実行されるようにこれらの括弧を前述のように配置しても、出力はここでは変更されません。新しいコードです。
#include<stdio.h>
int main()
{
int array[] = { 10, 20, 30, 40, 50 };
int *q1 = array;
printf("q1 = %p\n",q1);
printf("*q1++ = %d\n",*(q1++));// note the braces here *(q1++) so that () get evaluated
printf("q1 = %p\n",q1);
printf("*q1++ = %d\n",*q1);
}
結果は、あなたが言及したのと同じ中括弧の使用に注意してください。それでも出力は
q1 = 0x7fff043f2120
*q1++ = 10 <-- I expected *q1++ = 20//since I used braces ()
q1 = 0x7fff043f2124
*q1++ = 20
したがって、中括弧*(ptr ++)を使用した後でも、現在の行が実行された後も操作++が実行されていました。中括弧()は機能しませんでしたか?それとも、ポストインクリメントのものよりも優先権が与えられていませんでしたか?