• 締切済み

C言語 関数のパラメータがわかりません

C言語 関数のパラメータ(値渡し?)がよくわかりません。 意味として、「呼出し側から関数へのデータ受け渡しにはパラメータを使用します。パラメータとは関数名の後のカッコ内に書かれているデータ受け渡し用の変数を指します。」とあり、どのような動きになっているのかイメージがつきません。 どなたか教えていただけないでしょうか?

みんなの回答

回答No.5

No2氏の変数xとaの関係は、例えばこんな感じになります。 void main(void){ int x=10;  変数名    x ←int x;  値      10 ←x=10;  アドレス 0 1 2 3 4 5 6 7 8 9 10 11 test(x);  変数名    x              a←int a;  値      10             10←xの値をコピー  アドレス 0 1 2 3 4 5 6 7 8 9 10 11 } アドレスの意味は分からなくても大丈夫です。 test()関数を呼び出すと新たにaという変数が作られるのが分かって貰えれば充分です。

回答No.4

VBでいうByRefとByValの違いですね。 普通にコーディングしていればすべて値渡しになってます。 以下例文です。 値渡し void test(int a){ a++; } 参照渡し void test(int& a){ a++; } ここで int a=10; test(a); printf("%d\n",a); を実行した場合を考えると、値渡しの場合は10が、参照渡しの場合は11が出力されます。 このように、値渡しでは関数内で引数を変更しても影響を受けない、参照渡しでは影響を受ける、という感じでしょうか。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

>また、値の場所(アドレス)を渡すことを"参照渡し"といいます 違いますよ。

回答No.2

>C言語 関数のパラメータがわかりません 多分、"引数(ひきすう)"のことでしょう。 関数に値を渡すことを"値渡し"といいます。 また、値の場所(アドレス)を渡すことを"参照渡し"といいます。 test という関数があり、10 という数値をmain関数から渡したいとします。 その場合こうなりますね。 void main(void) {   int x = 10;   test(x); } void test(int a) {   /* ここの時点で a は 10 です */   a = 0; } この場合 10 という数値が test の変数 a に"コピー"されます。 "コピー"されるので、a に 0 を入れても、 main関数の x には影響がありません。 説明ヘタですみません。

ikuratouni
質問者

お礼

イメージはつかめました! ありがとうございます。

  • joqr
  • ベストアンサー率18% (742/4026)
回答No.1

「Cの絵本」この題名の本を読むと良いです 「アルゴリズムの絵本」も合わせて読みましょう これは、超超初心者向けの本です ここからスタートしましょう 今のレベルで質問をしても、回答は多分理解できないと思います すごく分かり易い本です

参考URL:
http://www.seshop.com/detail.asp?pid=1806
ikuratouni
質問者

お礼

ありがとうございます。 参考にしてみます!

関連するQ&A

  • RPGのプログラム感のパラメーター

    サブプロにパラメーターを渡し、処理をさせたいのですが、 サブプロは曜日計算をさせるもので、 パラメーターはA(4桁の西暦),B(2桁の月),C(2桁の日付)の変数で、 それぞれ桁数が4,2,2小数点桁数はすべて0です。 この3つを渡し、処理をさせWEEKという変数に曜日を算出させ、元のプログラムにその値を返したいのですが、受け渡しと値の戻し方がわかりません。 受け渡し側のパラメーターの宣言の仕方、CALLの仕方、WEEKの値の受け取り方 受け渡される側のパラメータの宣言の仕方、値の戻し方を教えてください。 よろしくお願い致します。

  • 関数と変数と定数と式をまとめて [C言語]

    はじめまして。私はC言語初心者です。 C言語では、関数の引数や変数への代入や配列の添え字などに、変数や定数や、式や関数の値を利用できるじゃないですか。私は今C言語について勉強したことをファイルにまとめていっているのですが、上記のようなことを説明するたびに「関数と変数と定数と式」と書くと長ったらしくなってしまいます。そこで、これらをまとめていう言葉があったら教えて欲しいのです。 回答よろしくお願いします。

  • c言語 関数宣言

    c言語で書かれたプログラムを見ていると、ちょっとわからない関数宣言がでてきました。 関数宣言をしているのだと思うのですが、これはいったいどういうことなのでしょうか。 grad_pf(x, a, yfit, dyda, ma) float x; float a[]; float *yfit; float dyda[]; int ma; {            処理・・・・・・・・ } 中括弧の前で宣言された変数はどういったものなのでしょうか。 よろしくお願いいたします。

  • 関数のパラメタ(C++)

    HRESULT AddFile( LPCWSTR pRemoteName, LPCWSTR pLocalName ); というメソッドがあり、 「LPCWSTR」はmapidefs.hの中で typedef const WCHAR FAR * LPCWSTR; と定義されています。 この関数を AddFile(L"http://172.0.0.1/index.htm","c:\\tmp\\index.htm"); ※\\は正しい。 のように呼ぶ場合は成功するのですが、 パラメタの値をいったん格納した変数を参照するように変更したい場合、 どのように書けばよいでしょうか。 文字列のポインタを引数にとる関数であれば、 aaa("zzz"); あるいは char str[256]="zzz"; aaa(str); のように書けばよいことはわかっていますが 同じ要領でやろうとするとこの場合エラーになってしまいます。

  • C言語:関数の返り値と引数について

    C言語:関数の返り値と引数について C言語の関数を作るとき、ほしい値とかを引数にして渡す場合と、そのまま返り値で渡す場合の二種類がありますよね? 例えば、 ・void Smooth( Image *src, Image *dst, int param ); ・Image *Smooth( Image *src, int param ); みたいな感じで mallocとかは返り値で渡してますけど、opencvの関数(例えばcvSmooth)とかは引数にしてます これって使い分けとかあるんでしょうか?

  • C言語の関数の実引数と仮引数の名前について

     C言語で関数を使う場合、実引数と仮引数の名前(変数名)は、変えなければならないのでしょうか、同じでもいいのでしょうか。C言語のルールでは、どうなっているのでしょうか。よろしくお願い致します。

  • c言語のmalloc関数、またrealloc関数

    c言語のmalloc関数は確保するメモリの領域を、配列としてのみしか処理出来ないのですか。 つまり、malloc関数で確保したメモリの領域を変数、また多次元配列、また構造体としては処理出来ないのでしょうか。 c言語のrealloc関数は以前の確保したメモリの領域から、確保し直したメモリの領域の場所が変わるかもしれないという事ですが、この場合の場所が変わるという意味は、メモリの領域のアドレスが変わるという事でしょうか。 また、以前の確保したメモリの領域に代入していたデータが使用出来なくなるという事でしょうか。

  • C言語 関数の戻り値と自動変数

    かなり基礎的な質問になるのですが、疑問に思うことがあり、質問をさせていただきます。 関数内で宣言した変数を戻り値として使う場合ですが、ポインタなどではなく実体の場合でも、静的変数として宣言をしたほうが良いのでしょうか? 現実的に考えると、プログラムが関数から出て、呼び出した側の関数が戻り値を受け取るまでの瞬間に、その領域が書き換えられる可能性は極めて低いと思うのですけど、C言語の仕様としてはどうなのでしょうか? 関数内で宣言した戻り値に使う変数には、必ずstaticをつけた方が良いのでしょうか? もしおわかりでしたら教えて下さい。

  • C言語の電卓におけるincludeについて

    C言語の電卓におけるincludeについて C言語の電卓におけるincludeについて質問です。 プログラミング言語C第2版 ANSI規格準拠 B.W.カーニハン・D.M.リッチー著 質問1. 4章にある電卓プログラムですが、getch.cがcalc.hをincludeしないのはなぜですか? 解説よろしくお願いします calc.h #difine NUMBER '0' main.c #include <stdio.h> #include <stdlib.h> #include "calc.h" #difine MAXOP 100 getop.c #include <stdio.h> #include <ctype.h> #include "calc.h" stack.c #include <stdio.h> #include "calc.h" #difine MAXVAL 100 getch.c #include <stdio.h> 質問2. 第4章までしか読んでいませんが、「関数で返さない値はゴミ(garbage)になる」と書いていました。 関数で返さない値は、関数から抜けると消えるものと思っていたので驚きました。 関数で返さない値の後処理はどうすればいいのですか? 質問3. 外部変数と静的変数の違いは? ―メモ― 局所変数 自動変数     main内の変数     int x;                          static int x; 永久的なメモリが与えられることを意味する 外部変数          main外の変数     static int x; 静的変数          関数内の変数     static int x; レジスタ変数        変数をレジスタに置く register int x; 以上、有識者の方、教えてくださいmm

  • c言語

    (c++ではなくC89準拠) c言語について質問 (1) 関数名()と関数名(void)は違う意味 (2) mainの引数の型は(void)か(int argc, char *argv[]) (3) K&Rは標準c準拠でmain()という表記があります ということは、(1)の関数名とはmain以外の関数名で、 main()とmain(void)は同じなんでしょうか。