ID非公開

2020/8/19 1:05

33回答

実行した結果xとyが入れ替わるというのはなんとなくわかったのですが、はじめの

実行した結果xとyが入れ替わるというのはなんとなくわかったのですが、はじめの void swap(int *x, int *y) { int z = *x; *x = *y; *y = z; } はどういう意味なのでしょうか? void swap(int *x, int *y) { int z = *x; *x = *y; *y = z; } int main(void) { int x = 10, y = 20, z = 30; swap(&x, &y); printf("x: %d, y: %d, z: %d", x, y, z); return 0; }

ベストアンサー

0

想像ですけども。 プログラム手続きは、 ・一文ずつ実行され、 ・そのたびに副作用が発生する : 変数 の中味が変化していく ということが、イメージできていないのではないですか? まるで数学の公式を読むかのように ・静的な説明文がフラットに書かれている ものとして 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

その他の回答(2件)

1

>はじめの void swap(int *x, int *y) はどういう意味 典型的な箱の比喩の亜種であるコップの比喩によりますと、あなたは三つのコップを用意し、それにx,y,zとのラベルを張り、x,yの中身をそれぞれ33mlの水と70mlの水で満たして、次のようにコップの水の入れ換えを行うと、意味を直感することができます int z = *x;//コップxに入ってる水をコップzに移す *x = *y;//コップyに入っている水をコップxに移す *y = z;//コップzに入っている水をコップyに移す この作業を実際に目の前で手作業でやってみると、意味を直感できます なぜ具体的作業を通すことで意味が直感出来るかと言うと、わたしにも分かりません

1人がナイス!しています