12/02/04 14:13:43.38
>>5
値渡し云々よりもまず、
add = fibo(fibo(&a,&b),fibo(&a,&b));
この呼び出しの仕方だけど、関数呼び出しの引数を渡す所で、
同じ変数を更新する関数を呼ぶのは、呼び出しの順番が保証されないのでまずい
int z;
void f(int a,b,c) { }
void a(void) { z = 1; } void b(void) { z = 2; } void c(void) { z = 3; }
f(a(),b(),c());
この例ではa b cでそれぞれzを更新しようとしても、
どの順番に呼ばれるのかは言語の仕様に規定がないので、
zの結果は処理系依存になる。
で、値渡しができない件については、関数の結果の値は右辺値だから、
その値に対してのアドレスは得られない。
一度、結果を別の変数に格納して、その変数のアドレスを渡せば良い。
int tmp = fibo()
fibo(&tmp)