Cのポインタについて(関数への値渡し)
C言語のポインタに関する質問です。関数に引数を渡す方法として以下の誤ったswap関数でなぜだめなのかいまいち得心できません。わかりやすくかみくだいて説明していただけると有り難いです。
できましたら、トレースともうしますか、変数の値の動きを詳細に段階的にプログラムの流れに沿って追っていって、だからこうなんだよ、みたいな解説がいただけたら有り難いです。わがままいってすみません。
/* 誤ったswap関数の宣言 */
void swap(int x, int y);
int main(void)
{
int num1 = 5;
int num2 = 10;
printf("変数num1の値は%dです。¥n", num1);
printf("変数num2の値は%dです。¥n", num2);
printf("変数num1とnum2の値を交換します。¥n", num1);
swap(num1, num2);
printf("変数num1の値は%dです。¥n", num1);
printf("変数num2の値は%dです。¥n", num2);
return 0;
}
/* 誤ったswap関数の定義 */
void swap(int x, int y)
{
int tmp;
tmp = x;
x = y;
y = tmp;
}
----------
/* swap関数の宣言 */
void swap(int *pX, int *pY);
int main(void)
{
int num1 = 5;
int num2 = 10;
printf("変数num1の値は%dです。¥n", num1);
printf("変数num2の値は%dです。¥n", num2);
printf("変数num1とnum2の値を交換します。¥n", num1);
swap(&num1, &num2);
printf("変数num1の値は%dです。¥n", num1);
printf("変数num2の値は%dです。¥n", num2);
return 0;
}
/* swap関数の定義 */
void swap(int *pX, int *pY)
{
int tmp;
tmp = *pX;
*pX = *pY;
*pY = tmp;
}
お礼
回答ありがとうございます。 なにやら、大量に同じ意味の返信が来て困っていますが、一番早く正確な情報を下さった、この方にポイントを振って終了したいと思います。 参考としていたものに、整数型はdとしか書いてなかったので、今回uというものを教えていただき非常に参考になったと判断します。 殆どのサイトでもdとしか書いていないもので、dしかないのかと思っていましたが、まだまだあるものですね。