関数の訂正

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
タマ

関数の訂正

#1

投稿記事 by タマ » 15年前

#include <stdio.h>

void swap (int x, int y)
{
int temp;

temp = x;
x = y;
y = temp;
}

int main (void)
{
int a = 1, b = 2;
swap(a, b);

printf("a = %d, b = %d\n", a, b); /* expected output: a = 2, b = 1 */
}

このままのプログラムだと出力がa=1、b=2になり、求められている数値と違います。
ヒントでvoid swap(int *a, int *b)というのが与えられましたが、xとyを全部*a、*bに
置き換えたりしてもうまくいきませんでした。

fatens

Re:関数の訂正

#2

投稿記事 by fatens » 15年前

そのうまくいかなかったプログラムを貼ってみてください。

シエル

Re:関数の訂正

#3

投稿記事 by シエル » 15年前

swap関数にaとbのアドレスを渡して、それをswap関数側でポインタ変数で受け取り、
下記のようにすれば、aとbの値が入れ替わります。

#include <stdio.h>

void swap (int *x, int *y)
{
int temp;

temp = *x;
*x = *y;
*y = temp;
}

int main (void)
{
int a = 1, b = 2;
swap(&a, &b);

printf("a = %d, b = %d\n", a, b); /* expected output: a = 2, b = 1 */
}

シエル

Re:関数の訂正

#4

投稿記事 by シエル » 15年前

この辺のページを見ればよくわかるかも。
http://9cguide.appspot.com/15-06.html

タマ

Re:関数の訂正

#5

投稿記事 by タマ » 15年前

良く分かりました。ありがとうございますっ

閉鎖

“C言語何でも質問掲示板” へ戻る