自作関数を使って 変数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(トレビア~~~ン)」


アレサ「ですが


自作関数functionを使った


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


よくご覧ください」


#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には


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


int yには


        変数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という名前の付いたメモリに格納されている数値データは


交換されないってわけだね」


アレサ「function(a, b);


が実行されるとき


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


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


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

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


         だけ🍰🍰



代入されている。


すなわち


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


というわけですね。」


ソーラー「やったね


これにて完了だね!」


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


このままでは


自作関数を実行しても


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

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


が交換されていません」



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


アレサ「ソーラーさん


また ボケる場所を


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






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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る