inc1()を呼び出す行は、「6」(3 + 3)を出力します[最初の3つはinc1()からのものであり、ポストインクリメント演算子のため、インクリメントされた値は返されません]。また、inc1()は値によって呼び出されるため、'a'の値は関数の外部では影響を受けません。
ここで、論文でinc2()を呼び出すステートメントが次のようになっている場合:
printf("%d\n", inc2(a) + a);
次に、コードはコンパイルされますが('a'にメモリ位置を格納することを期待して)、実行時にその値('a = 3'の場合)に応じて、逆参照しようとしているため、セグメンテーション違反が発生します。プログラムがアクセスすることを想定していないメモリ位置3。
または、ステートメントが次の場合:
printf("%d\n", inc2(&a) + a);
次に、inc2()はポインタ(アドレス)を介して「a」の値をインクリメントしますが、ポストインクリメント演算子を使用しているため、「a」(3)の古い値を返しますが、とにかく「a」とその後のアクセスをインクリメントします'a'に変更すると、新しい値が取得されます。次の「a」は、評価が左から右に行われるため、値「4」になります。したがって、7(3 + 4)が出力されます。
Cのポインタと変数の違いが明らかになることを願っています。