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

ソーラー「さあ


次は自作関数を使って


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

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



交換してみよ~う


tres bien(トレビア~ン)



#include <iostream>


using namespace std;



void function(int x, int y){


int c;


c=x;

x=y;

y=c;

}


int main(){


int a=1;

int b=2;


cout << "変数aに格納されている数値データは" << a << "です\n";

cout << "変数aに格納されている数値データは" << b << "です\n";


function(a,b);


cout << "変数aに格納されている数値データは" << a << "です\n";

cout << "変数aに格納されている数値データは" << b << "です\n";

return 0;


}


ビルド実行結果


(EAZY IDECの場合)


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

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

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

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



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


なにをやっているのか


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


僕もわからないんだ~~


ははははは~~~~~」


てんC「ソーラーさん



自作関数を使って


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

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



交換してみよ~う


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



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



てんC「前のエピソードでは


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


#include <iostream>


using namespace std;


int main(){


int a=1;

int b=2;


cout << "変数aに格納されている数値データは" << a << "です\n";

cout << "変数aに格納されている数値データは" << b << "です\n";

int c;

c=a;

a=b;

b=c;


cout << "変数aに格納されている数値データは" << a << "です\n";

cout << "変数aに格納されている数値データは" << b << "です\n";


return 0;


}


ビルド実行結果


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

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

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

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


てんC「👆この前のエピソードのプログラムを


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


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

👇」



#include <iostream>


using namespace std;


void function(int x, int y) {


int c;


c = x;

x = y;

y = c;

}



int main() {


int a = 1;

int b = 2;


cout << "変数aに格納されている数値データは" << a << "です\n";

cout << "変数aに格納されている数値データは" << b << "です\n";

function(a, b);


cout << "変数aに格納されている数値データは" << a << "です\n";

cout << "変数aに格納されている数値データは" << b << "です\n";


return 0;


}



ビルド実行結果


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

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

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

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




てんC「いかがですか(*^▽^*)」


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


てんC「前のエピソードのプログラムの


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(トレビア~~~ン)」


てんC「ですが


自作関数を使った


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


よくご覧ください」


#include <iostream>


using namespace std;


void function(int x, int y) {


int c;


c = x;

x = y;

y = c;

}



int main() {


int a = 1;

int b = 2;


cout << "変数aに格納されている数値データは" << a << "です\n";

cout << "変数aに格納されている数値データは" << b << "です\n";

function(a, b);


cout << "変数aに格納されている数値データは" << a << "です\n";

cout << "変数aに格納されている数値データは" << b << "です\n";


return 0;


}



ビルド実行結果


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

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

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

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


てんC「ビルド実行結果


変数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;


が実行されています」


てんC「ソーラーさん


変数x

変数y


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


x=1

y=2


から


x=2

y=1



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


ソーラー「本当だね。




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


  

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



ということは



 変数aに格納されてい|る数値データ1と変数bに格納されている数値2は《💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖》


       

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



つまり


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


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


独立した


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


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


交換されても


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


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


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


てんC「自作関数の定義により作製される


変数x

変数y



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


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

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



         だけ🍰🍰



代入されている。


すなわち


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


というわけですね。」


ソーラー「やったね


これにて説明完了だね!」


てんC「ソーラーさん・・・


このままでは


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

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



が交換されていません」



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


てんC「自作関数を使うときは値渡しが実行されるということが


ポイントなのですね。」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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