2

ポインタを左辺値として返す関数を使用できないのはなぜですか?

たとえば、これは機能します

int* function()
{
    int* x;
    return x;
}

int main()
{
    int* x = function();
    x = new int(9);
}

しかし、これではありません

int* function()
{
    int* x;
    return x;
}

int main()
{
   int* x;
   function() = x;
}
  1. ポインター変数を左辺値として使用できますが、ポインターを左辺値として返す関数を使用できないのはなぜですか?

  2. また、関数がポインターではなく参照を返す場合、それは有効な左辺値になります。

4

2 に答える 2

1

あなたの最初のサンプルは、私があなたがそう思うと思う理由をしません。最初に関数呼び出しの結果を変数xに格納し、次にxの値を新しく作成された配列でオーバーライドします。*(function())= 5は、関数内のローカル変数xで指定されたランダムなメモリ位置に5を正しく書き込もうとする必要があります。

サンプル:

int x;

int* function()
{
    return &x;
}

int main()
{
   *(function()) = 5;
   printf("%d\n", x);
}
于 2010-04-27T04:26:24.557 に答える
0

2番目のコードスニペットのmain()の最後のステートメントを再確認してください。左辺値は、代入演算子(=)の左側で使用できる変数です。事実上、逆ではなく、関数に値xを割り当てています。関数は引数を取るか、値を返す場合があります。それらに直接値を割り当てることはできません。

于 2010-04-27T04:27:07.607 に答える