C言語関係掲示板

過去ログ

No.61. returnの返し方について


3日程考えてギブアップしたいのですが。
B.w.カーニハン著 プログラミング言語C P30で下記の内容のプログラムがありますが、関数の呼び出し、return(p)はどこに返っているのか?
power(2,i)power(-3,i)の使い方がわかりません。お手数ですが、ご教授宜しくお願い致します。


#include <stdio.h>

int power(int m, int n);
main()
{
int i;

for(i = 0; i < 10; ++i)
printf("%d %d %d\n", i, power(2,i), power(-3,i));
return 0;

}

int power(int base,int n)
{
int i, p;

p =1;
for(i = 1; i <= n; ++i)

p = p * base;
return p;

}


関数内のreturnする値、ここではpが関数の値
power(2,i)っていうのは、power()関数に具体的な数値を
代入して求められた値(power(2,i)のとき、returnされる値)


>関数内のreturnする値、ここではpが関数の値
>power(2,i)っていうのは、power()関数に具体的な数値を
>代入して求められた値(power(2,i)のとき、returnされる値)

どうもありがとうございます。でも、まだピンときません。
同じ内容が、
http://ccmail.miyagi-ct.ac.jp/~kazushi/m3joho-9.html
に載ってましたが、たとえば、ともじさんの第11章 関数 の(2) 関数の使用例 なら、意味はわかるのですが??


> printf("%d %d %d\n", i, power(2,i), power(-3,i));

printf()関数内で、
'i'は最初の(一番左にある)%dの値となっています。
次の%dの値がpower(2, i)でreturnされた'p'となります。
そして、最後の%dの値はpower(3, i)でreturnされた'p'になるのです。

って、私、質問の内容を取り違えていたかな?


>次の%dの値がpower(2, i)でreturnされた'p'となります。

ありがとうございます。ここは、とみじさんの
11−2. 関数間のデータ授受の方法 の
printf("rc = %d\n",rc);      ⇒ rc=5000を出力 
と載ってましたが、但、きちんと、
rc = ex_sub(num);
とされてたので納得出来ます。しかし、power(2, i)には、その処理が載ってなく、ちょっと不満です。

次に、この中で、power(2, i)の処理の仕方がちょっとわかりません。
++iされて、int power(int base,int n)に渡されるのか?
要は、処理の流れが理解出来てないのだと思います。
(mainのiとint power(int base,int n)のiは違う、だったらどう処理されるのだろう?)
などなど、考えております。


</pre>
#include <stdio.h>

int func1(void);
int func2(int aa);

int main(void)
{
int a, b;

a = func1();
b = func2(5);

printf("%d %d\n", a, b);
printf("%d %d\n", func1(), func2(5));

return 0;
}

int func1(void)
{
int x;

x = 100;

return x;
}

int func2(int aa)
{
int y;

y = 10 * aa;

return y;
}
</pre>

簡単なサンプルを作ってみました。
この関数が何をしているか、何に何が代入されているか、関数の結果などを
よく見てみてください。


for文や関数の入れ子を使わないように分解すると次のようになります。
見当違いだったらごめんなさい。

        int i;
        i = 0;
        while ( i < 10 ) {
                int w1, w2;
                w1 = power(2, i);
                w2 = power(-3, i);
                printf("%d %d %d\n", i, w1, w2);
                ++i;
        }
        return 0;


chuさん Toshi_2さん ほんとに、ありがとうございました。
やっとわかりました。
w1 = power(2, i);
w2 = power(-3, i);
納得しました。
わざわざ、いろんなサンプルまで作って頂いて、感謝します。
(baseの処理もわかりました。)

戻る


「初心者のためのポイント学習C言語」 Last modified:2001.11.15
Copyright(c) 2000-2002 TOMOJI All Rights Reserved