C言語の本当に初心者です。 ポイント変数がなかなか理解できません。 選択ソートの次のようなプログラムを書きました。 //ss02.c //select sort #include <stdio.h> int ary[10]={5,2,8,15,1,7,13,19,0,12}; void numChange(int *x, int *y){ int tmp; tmp = *x; *x = *y; *y = tmp; } void numSelect(int ary[10], int a, int b){ for (a=0;a<9;a++){ for (b=a+1;b<10;b++){ if (ary[a]>ary[b]){ numChange(&ary[a], &ary[b]); } } } } int main(){ int a=10; int b=0; printf("Before sort : "); for (a=0;a<10 ;a++){ printf("%d ",ary[a]); } printf("¥n"); numSelect(ary,0,0); printf("After sort : "); for (a=0;a<10;a++){ printf("%d ",ary[a]); } printf("¥n"); return 0; } 一応正しく動作するのですが、関数numChange(int *x, int *y)を関数numSelectの中から呼び出すとき、numChange(&ary[a], &ary[b])としています。 勝手な私の理解では、「*x」や「*y」は変数の中身という認識で、「&ary[a]」や 「&ary[b]」はメモリのアドレスという認識を持っているので、アドレスを中身に渡してどうして正しく動作するのか混乱しています。「&ary[a]」や 「&ary[b]」を「ary[a]」や 「ary[b]」として渡してもいいのじゃないかと思ってしまいますが、実際は誤動作します。 理解のヒントをいただければ幸いです。
C言語関連