自作関数を使って 変数aに格納されている数値と 変数bに格納されている数値を 交換してみよ~う

ソーラー「さあ


次は自作関数を使って


変数aに格納されている数値と

変数bに格納されている数値を


交換してみよ~う


tres bien(トレビア~ン)



#include <stdio.h>


void function(int x, int y){


int c;


c=x;

x=y;

y=c;

}

int main(void){


int a=1;

int b=2;


printf("変数aに格納されている値は%dです\n",a);

printf("変数bに格納されている値は%dです\n",b);


function(a,b);


printf("変数aに格納されている値は%dです\n",a);

printf("変数bに格納されている値は%dです\n",b);


return 0;


}


コンパイル結果


(EAZY IDECの場合)


変数aに格納されている値は1です

変数bに格納されている値は2です

変数aに格納されている値は1です

変数bに格納されている値は2です


ビルド結果


(Visual studioの場合)


変数aに格納されている値は1です

変数bに格納されている値は2です

変数aに格納されている値は1です

変数bに格納されている値は2です


ソーラー「さあさ、みんな~


なにをやっているのか


さっぱり分からないねぇ~~~😊


僕もわからないんだ~~


ははははは~~~~~」


アレサ「ソーラーさん



自作関数を使って


変数aに格納されている数値と

変数bに格納されている数値を


交換してみよ~う


といっておられましたが・・・」



ソーラー「確かそんなこともあったよ・・・」



アレサ「前のエピソードでは


変数aと変数bに格納されている数値の交換をされていました。


#include <stdio.h>


int main(void){


int a=1;

int b=2;


printf("変数aに格納されている値は%dです\n",a);

printf("変数bに格納されている値は%dです\n",b);


int c;

c=a;

a=b;

b=c;


printf("変数aに格納されている値は%dです\n",a);

printf("変数bに格納されている値は%dです\n",b);


return 0;


}


コンパイル結果

変数aに格納されている数値は1です

変数bに格納されている数値は2です

変数aに格納されている数値は2です

変数bに格納されている数値は1です



アレサ「👆この前のエピソードのプログラムを


自作関数を使って書き換えたものが


このエピソードで取り扱っているプログラムとなっています

👇」



#include <stdio.h>


void function(int x, int y){


int c;


c=x;

x=y;

y=c;

}

int main(void){


int a=1;

int b=2;


printf("変数aに格納されている値は%dです\n",a);

printf("変数bに格納されている値は%dです\n",b);


function(a,b);


printf("変数aに格納されている値は%dです\n",a);

printf("変数bに格納されている値は%dです\n",b);


return 0;


}


コンパイル結果


(EAZY IDECの場合)


変数aに格納されている値は1です

変数bに格納されている値は2です

変数aに格納されている値は1です

変数bに格納されている値は2です


ビルド結果


(Visual studioの場合)


変数aに格納されている値は1です

変数bに格納されている値は2です

変数aに格納されている値は1です

変数bに格納されている値は2です



アレサ「どうでしょうか?」


ソーラー「そこまで解析されるとはおもってもみなかったよ・・・」


アレサ「前のエピソードのプログラムの


int c;

c=a;

a=b;

b=c;


の部分を


自作関数の定義を


void function(int x, int y){


int c;


c=x;

x=y;

y=c;

}

として


自作関数

function(a,b);


で置き換えたのが


今のエピソードのプログラムとなっています。」


ソーラー「おお娘や・・


tre bien(トレビア~~~ン)」


アレサ「ですが


自作関数を使った


今のエピソードのプログラムを


よくご覧ください」


#include <stdio.h>


void function(int x, int y){


int c;


c=x;

x=y;

y=c;

}

int main(void){


int a=1;

int b=2;


printf("変数aに格納されている値は%dです\n",a);

printf("変数bに格納されている値は%dです\n",b);


function(a,b);


printf("変数aに格納されている値は%dです\n",a);

printf("変数bに格納されている値は%dです\n",b);


return 0;


}


コンパイル結果


(EAZY IDECの場合)


変数aに格納されている値は1です

変数bに格納されている値は2です

変数aに格納されている値は1です

変数bに格納されている値は2です


ビルド結果


(Visual studioの場合)


変数aに格納されている値は1です

変数bに格納されている値は2です

変数aに格納されている値は1です

変数bに格納されている値は2です



アレサ「コンパイル結果


変数aに格納されている値は1です

変数bに格納されている値は2です

変数aに格納されている値は1です

変数bに格納されている値は2です


を見てもお分かりいただけますように


前のエピソードのプログラムと違い


今のエピソードのプログラムでは


変数aに格納されている数値と

変数bに格納されている数値が交換されていません。」


ソーラー「ふふふ 値渡しがおこなわれているってことかな。


自作関数の定義は


void function(int x, int y){


int c;


c=x;

x=y;

y=c;

}


となっているよね


function(a, b);


が実行されるとき


この自作関数の引数となっているint xとint yに


main関数内で変数宣言された


変数aと変数bが代入されているんだね。


そう ここで 値渡しのシステムが登場してくるんだ


この自作関数の引数となっているint xとint yに


main関数内で変数宣言された


変数aと変数bが代入されているんだけど


実際には


この自作関数の引数となっているint xとint yには


変数aに格納されている数値1

変数bに格納されている数値2


が代入されているんだ。


そう 変数a,変数bが格納している値だけが


int x

int y

にわたされているんだね。


つまり

その状態では


x=1;

y=2;


となっているわけだ


ここで


int c;


c=x;

x=y;

y=c;

が実行されると


変数cに格納される数値は1

変数xに格納される数値は2

変数yに格納される数値は1


となります


つまり


x=2;

y=1;


となります。」


アレサ「ソーラーさん


変数x

変数y


に格納されている数値データが


x=1;

y=2;


から


x=2;

y=1;



に変更されています(*´▽`*)」


ソーラー「本当だね。




    変数xと変数yに格納されている数値データは🐤🐤🐤🐤🐤🐤🐤🐤🐤🐤🐤🐤🐤🐤🐤🐤🐤🐤


  

        交換されたんだ🐤🐤🐤🐤🐤🐤🐤



ということは



 変数aに格納されている数値1と変数bに格納されている数値2は💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖


       

          交換されていないんだ💖💖💖💖💖💖💖💖



つまり


変数aという名前の付いたメモリと


変数bという名前の付いたメモリとは


独立した


変数xという名前の付いたメモリに格納されている数値と


変数yという名前の付いたメモリに格納されている数値が


交換されても


変数aという名前の付いたメモリに格納されている数値と


変数bという名前の付いたメモリに格納されている数値を


交換できないってわけだね」


アレサ「自作関数の定義により作製される


変数x

変数y



main関数内で変数宣言された


変数aの格納している数値1

変数bの格納している数値2


         だけ🍰🍰



代入されている。


すなわち


         値渡しされている🍊🍊🍊🍊🍊🍊🍊🍊


というわけですね。」


ソーラー「やったね


これにて完了だね!」


アレサ「ソーラーさん・・・


このままでは


変数aに格納されている数値1

変数bに格納されている数値2


が交換されていません」



ソーラー「なんだってぇぇぇ!」


アレサ「ソーラーさん


また ボケる場所を


間違えられておられますの」






  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます