想像ですけども。
プログラム手続きは、
・一文ずつ実行され、
・そのたびに副作用が発生する : 変数 の中味が変化していく
ということが、イメージできていないのではないですか?
まるで数学の公式を読むかのように
・静的な説明文がフラットに書かれている
ものとして swap のコードを眺めているのではないかと
想像しました。
以下、お役にたつかどうかは、わかりませんが。
行刻みでデバッグプリントを入れてみたもの。
main の変数 x は、話をややこしくするだけ(swapにはまったく無関係)
なので、破棄しました。
コンパイル・実行 して、結果を眺め、それとソースコードを
見比べながら
・手続きは 順次 に実行されている
ということを、理解努力してみていただきたいです。
#include <stdio.h>
void swap(int *x, int *y) {
int z = *x;
printf("swap[1] z=%d, *x=%d, *y=%d\n", z, *x, *y);
*x = *y;
printf("swap[2] z=%d, *x=%d, *y=%d\n", z, *x, *y);
*y = z;
printf("swap[3] z=%d, *x=%d, *y=%d\n", z, *x, *y);
}
int main(void) {
int x = 10, y = 20;
printf("main[1]: x=%d, y=%d\n", x, y);
swap(&x, &y);
printf("main[2]: x=%d, y=%d\n", x, y);
return 0;
}
私のPCでの実行結果:
main[1]: x=10, y=20
swap[1] z=10, *x=10, *y=20
swap[2] z=10, *x=20, *y=20
swap[3] z=10, *x=20, *y=10
main[2]: x=20, y=10