C言語なら俺に聞け(入門篇) Part 39
■ このスレッドは過去ログ倉庫に格納されています
0242205
2008/11/16(日) 20:50:05引数が値渡ししかないってのはわかる.アドレスを引数にもってくるときも,アドレスの値を渡してるわけだし.返却値が値渡しかどうかって話になったのは,俺が引数を比較対象に持ってきたからだすまん.
准教授は授業で,
関数が終了したら関数内の自動変数は解放される.だから,返値に用いる変数にはstaticをつけないと,戻った時点で値が変わってる可能性がある.だから,返値に用いる変数にはstaticをつけろってことだった.
今回,俺がstaticをつける事に疑問を抱いて,同じ学科の友人との話題にしたんだ.
准教授の説明の意味を,呼び出し元に戻るときに関数が終了するから,戻った時点でその変数の中身が保証されない.
だから,代入する時点で保証されないっていうことだと考えた.もし,引数の場合と同じように値がコピーされるなら,staticをつけないといけない意味がわからない.
int func(void) {
int n;
n=50;
return n;
}
int main(void) {
int a;
a = func();
}
とすると,
内部的には,return文は式のアドレスを取得するという意味で,
a = func();のfunc()はそのアドレスの指す内容に置き換えられるという感じなんだろうと解釈したんだ.
そうすれば,staticが必要な意味が現れてくる.
だから,return N[i];が正しく返されるのかを質問したりしたんだ.return文で評価した値をどうやって呼び出し元に持ってくるのかがわかってればこんな質問はしなかった.
return N[i];に至っては,N[*(&i)]てな感じになって呼び出し元にもっていくのだと思ってた.
>>229
a = HOGE();で,HOGE()が評価されたときに,HOGE()の実行結果の値をどうやって,呼び出し元にもってくるのかが問題です.だから値渡しなのかどうかって話になったんです.
■ このスレッドは過去ログ倉庫に格納されています