スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

関数を作るときの注意

昨日関数の作り方を勉強しましたね?
その関数を作るときに注意しなきゃいけないことが一つあるそうです。

* 引数には 「変数そのもの」 ではなく 「変数に入っている値」 が渡るということです。

変数そのものじゃなくて値を渡してる・・・?いまいちピンときませんよね。

まずはこの文章の意味を理解するべく
「ある変数の値を1だけ増加してくれる」関数を作ることを例として考えていこうと思います。
この関数は1増加させるので 増分という意味の increment() というものを作ろうと思います。

使い方としてはそのままですね。変数の値を1増やす。というものです。
では見ていきましょう

a = 10;
increment(a);


このincrement()を作るときにまず最初に思いつくのが
次のようなプログラムではないでしょうか?(C言語に詳しくない人が)

void indrement(int a)
{
  a++;
}


なんだか合ってそうですよね?
ではコレを使用したプログラムで実験を行ってみましょう

void indrement(int a)
{
  a++;
}

main()  //メイン関数
{
  int num;

  num = 10;           //10を代入
  increment(num);       //ここでインクリメント関数を呼ぶ

  printf("num =%d",num)   //ここでnumを表示(11と表示されるはず)
}


結果は num=10 と表示されます。
予想では11になるはずだったのですがなぜでしょうか?変数numの内容は変わっていません。

これが引数には 「変数そのもの」 ではなく 「変数に入っている値」 が渡るということです。

main()メイン関数の中にnumという変数がありましたね。
そこでは10という値が代入されていました。

ここまでは大丈夫ですよね?

問題はここからですね。
関数increment()が呼ばれました。
その時にincrement()に渡された 変数num が increment()の中でそのまま使われるように思ってしまいますがそうではないのです

実はこのときincrement()関数の中では 変数num ではなく まったく違った新しい変数(例えば変数a)が作られているのです。(ぇえええ?
そしてその新しく作られたaに numの中に格納されていた値「10」が 代入 されていたのです。

プログラムをみるとmain()にあった変数numがincrement()にそのまま渡されているように思いますが実際にはaはincrement()の中に新しく変数が作られたものであってそこに「10」という値がコピーされているだけ。なのです。

なのでincrement()関数の中で a に対して演算をしてもmein()関数の中の 変数num には何の影響もないというわけです。


でも今回のincrement()関数のように「ほかの関数に変数の内容を変化させてほしい!」という場合だってあるはずですよね?

そういったときにはポインタ渡しといって「ポインタ変数」を使うみたいですよ!

詳しくはまた明日。
がんばるぞー('A`)おー。

コメントの投稿

非公開コメント

プロフィール

しー

Author:しー
*使用ソフト*
メタセコ
Blender
modo

カレンダー
08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
WEB拍手
カテゴリ
最新コメント
検索フォーム
リンク
ブロとも申請フォーム

この人とブロともになる

いらっしゃいませ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。