2016-04-26 9 views
4
I have a code: 

struct point makepoint(int x, int y) 
{ 
    struct point temp; 
    temp.x = x; 
    temp.y = y; 
    return temp; 
} 

makepoint関数の終了後にローカル構造体が返されるため、ここで問題がありますか?このコードは、ブライアンW.カーニハン•デニスM. Ritchieのローカル構造を返すか?

により本

Cプログラミング言語(第二版)からです。

+3

これは 'int func(void){int x = 666; xを返します。 } '。 – Lundin

答えて

2

Cでは、値が渡されるため、実際のやり方では問題はありません。

リターンを実行すると、変数tempの値が返されます。関数が復帰した後に変数が破壊されても、問題はありません。

+0

関数が終了する前にローカル構造体を非ローカル構造体にコピーします。 –

+0

@Lazar 'temp'構造体は' makepoint'を呼び出した直後に1回のみコピーされます。 –

+1

@Lazar:構造体と整数を返すことに違いはありません。どちらも値で返され、参照では返されません。 – Fang

2

tempは、自動ストレージを持つ変数です。したがって、関数が返されたときには使用できなくなります。

ただし、返される関数の構造体はtempではなく、tempのコピーです。したがって、構造体を返す関数の問題はありません。

0

配列とは異なり、構造体はパラメータとして渡されるとき、または返されるときにコピーされます。プリミティブ型(int)のようにコピーされます。

関連する問題