• ベストアンサー

関数の値の渡し方

charmer29-2の回答

回答No.3

あー、2chで寸分違わぬ質問を見かけたのでレスつけときました。 あちらをご覧ください。

関連するQ&A

  • 関数への変数の受け渡しについて

    関数に変数を受け渡すとき、配列とそれ以外の変数では受け渡すものが違いますよね。 変数の場合は、変数の値を関数側の変数にコピーする。 配列の場合は、配列そのもの(配列のポインタ)を関数に渡す。 なぜ配列の場合は値のコピーではなくて、ポインタを渡す仕様になっているんでしょうか。 ひとつめは、どのような意図でそのような仕様になっているのかという質問です。 もうひとつは、関数に配列の値だけを渡すにはどうすればいいのか、つまり元の配列のほうの値は書き換えないで欲しいというときはどうすればよいのかという質問です。 よろしくおねがいします。

  • 誤った関数に関する値渡しについて

    こんにちは、まずはソースを記述します。 #include<iostream> using namespace std; //誤ったswap関数の宣言 void swap(int x, int y); int main() { int num1 = 5; int num2 = 10; cout << "変数num1の値は" << num1 << "です。\n"; cout << "変数num2の値は" << num2 << "です。\n"; cout << "変数num1とnum2の値を交換します。\n"; swap(num1, num2); cout << "変数num1の値は" << num1 << "です。\n"; cout << "変数num2の値は" << num2 << "です。\n"; return 0; } //誤ったswap関数の定義 void swap(int x, int y) { int tmp; tmp = x; x = y; y = tmp; } >>関数内で仮引数xとyの値を交換する処理を行っていても、これは変数num1とnum2の値を「コピー」した5と10を交換しているにすぎません。 swap関数内で値を交換しても、呼び出し元の変数であるnum1とnum2に影響を与えることができません。 ・・の文章の中から質問ですが値渡しとはどういうことでしょうか? 参照渡しとはどう違うのでしょうか? ご教示お願いします。

  • 素数計算&表示

    はじめまして。 一週間前授業で 「javaスクリプトで素数を計算し、結果を表示するプログラムを書いてきてください」 と言う課題が出まして、今日まで考えてきたんですがまったく糸口がつかめません。  ヒントとして <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <!-- 以上2行のmetaタグは決まり文句である --> <title>テキストボックスから読込んで、その結果を出力する雛形</title> <!-- 関数の定義など、BODY要素中で呼出されるものはHEAD要素の中に書いておく --> <script type="text/javascript"> <!-- function nibai(hikisuu) { var kotae; /* 答えを入れるための'kotae'という名前の変数 ("箱")を用意する。 */ kotae = Number(hikisuu) * 2; /* 変数kotaeに、引数hikisuuに入っている 入力された値を2倍 した値を代入する */ return kotae; /* 変数 kotae を 計算結果として返す */ } // --> </script> </head> (head以下省略)と言うのを与えられて、nibaiと言う関数をいじくれば出来ます。といわれ、いろいろやってみたのですがいつもエラーになってしまいます。  ぶしつけで申し訳ありませんが、やり方を教えてください。

  • ある値が、配列のなかに存在するか、知る関数

    お世話になります ある値が、配列のなかに存在するか、知る関数、はありませんか たとえば、配列:Aryに、10,20,30,40、と入っている 値20、をもってチェックしたとき、True、が返り 値22、ではFalse、が返る こんな関数ないでしょうか ACCESSのVBAです よろしくお願いします

  • 関数内で数値入力したときの戻り値は?

     数値を入力して変数に格納する、という作業を複数回繰り返すような数値入力のための関数をつくったとします。そのような場合、関数の宣言や戻り値はどのようにすればよいのでしょうか?  グローバル変数を用いたときにはうまくいったのですが、ローカル変数にかえようとしたらmain関数の中で値が割り当てられていません、となってしまいました。  教えてください。お願いします。

  • void関数について

     void ranmotion(...,&esti,...);  というvoid関数を作りまして、 int main() {  int esti=0; .... ranmotion(...,esti,...); } を計算したとき、ranmotion(...,esti,...)の中ではesti=100とかと計算が出来ているのですが、main関数の中では、esti=0のままになってしまいます。どうすればesti=100などの計算結果をmain関数内に持っていくことができるのでしょうか?  ご教授お願いします。

  • 手続き型と関数型について。

    手続き型言語の定義は、「記述された命令を逐次的に実行し、処理の結果に応じて変数の内容を変化させていくプログラミング言語」となっていて、関数型言語の定義は、「数学的な言語仕様をもつプログラミング言語のこと。一度値を与えられた変数は常にその値を維持し、計算は計算結果を引数とした関数呼び出しの繰り返しとして行われる。」とあります。 関数型の、「一度値を与えられた変数は常にその値を維持し」はどういう意味ですか? 例えば、a=2とした後に、a=3などとすればaの値は変わっているのですが。 簡単な例で説明してください。

  • 0を定義域とし、1を値として生成する関数

      0を定義域とし、計算の結果として値1を出力する関数は作れますか。  

  • C言語の関数の仮引数の記述

    関数の仮引数の( )の中に何の変数を書いたらいいかいまいちつかめていません。関数の実行文や、もしくはmain関数の呼び出し実行文とどんな互換性があってどの変数を書いていいかわからないので教えてください。一応わかる部分を少し書きますがたとえば、変数をコピーするint copy( int a, int b )ってゆーのがあるとすれば、bをaにコピーするために必要となる変数a、bを( int a, int b )と書けばいいと思うんですがどうでしょう?仮引数部分にはmain関数に返す値となる変数だけを書くとどうなるんでしょう? なんかわかりにくくてすいませんが、答えになってなくても関係することであれば返信ください。 あとコンパイラーはCygwinで、理解度はfor文やif文や関数、配列などの基本はだいたいOKです。ポインタとかその他の応用についてはわかりません。

  • Cのポインタについて(関数への値渡し)

    C言語のポインタに関する質問です。関数に引数を渡す方法として以下の誤ったswap関数でなぜだめなのかいまいち得心できません。わかりやすくかみくだいて説明していただけると有り難いです。 できましたら、トレースともうしますか、変数の値の動きを詳細に段階的にプログラムの流れに沿って追っていって、だからこうなんだよ、みたいな解説がいただけたら有り難いです。わがままいってすみません。 /* 誤ったswap関数の宣言 */ void swap(int x, int y); int main(void) { int num1 = 5; int num2 = 10; printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); printf("変数num1とnum2の値を交換します。¥n", num1); swap(num1, num2); printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); return 0; } /* 誤ったswap関数の定義 */ void swap(int x, int y) { int tmp; tmp = x; x = y; y = tmp; } ---------- /* swap関数の宣言 */ void swap(int *pX, int *pY); int main(void) { int num1 = 5; int num2 = 10; printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); printf("変数num1とnum2の値を交換します。¥n", num1); swap(&num1, &num2); printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); return 0; } /* swap関数の定義 */ void swap(int *pX, int *pY) { int tmp; tmp = *pX; *pX = *pY; *pY = tmp; }