2

誰かがcの左辺値と右辺値について適切な説明をしてくれませんか? 私は適切なものを見つけていません。誰かがリンクを持っている場合は、コメントとして貼り付けてください。

4

6 に答える 6

2

左辺値は、アドレス (通常は例外: レジスタ変数) を取得できるエンティティであり、名前で参照するのに十分な長さでメモリに存在します。
r値は、アドレスを取得できない変数オブジェクトであり、名前で参照できるほど長くメモリに存在せず、名前がありません。多くの場合、名前のない一時オブジェクトとも呼ばれます。

サンプル プログラム:

int returnanInteger()
{
    int i = 10;
    return i;
}

void doSomething(int i)
{
    //do something, right now we don't care
}
int main()
{
   int i = 20;
   doSomething(returnanInteger());

   return 0;
}

上記のプログラムでは、アドレスを取得でき、名前で参照できるため、iinmain()左辺値です。
一方、声明では:

doSomething(returnanInteger());

によって返される値はreturnanInteger()右辺であり、そのアドレスを取得することはできず、名前で参照するのに十分な時間メモリに残りません。すぐにコピーされて、引数として関数に渡されますdoSomething()

于 2012-05-18T04:47:51.467 に答える
0

malloc単純化すると、変数、複合リテラル、または同様のメカニズムを介して、プログラムで明示的な割り当てを持つ型付きの「オブジェクト」として左辺値を表示できます。型に応じて、左辺値は変更可能または変更不可 (const型に対して で指定) になり、そのアドレスを取得できるかどうか (register変数の宣言に対して で指定) が許可される場合があります。

右辺値は、プログラムが評価の中間ステップとして生成する単なる「値」であり、コンパイラは最適な特定の表現を自由に選択できます。右辺値は変更できず、通常はそのアドレスを取得できません。(配列コンポーネントの評価に使用できる非常に特殊な状況があります。)

于 2012-05-18T06:23:01.043 に答える
0

Als が既に上で述べたこと (十分に詳細です) に加えて、次のリンクが役立つ場合があります。

http://msdn.microsoft.com/en-us/library/bkbs2cds.aspx

LValue&RValue

C++ ベースのリンク

于 2012-05-18T04:57:27.247 に答える
0

= の右側にあるすべての値 (C プログラミングでは "equal" は符号に等しい) は右辺値です。Like x = 23; c = 'x'; int *ptr = &x;

ここで 23 , 'x' と '&x" は右辺値です. これに対応して x , c と *ptr は左辺値です. これらはメモリ内の変数またはオブジェクトを表します. 右辺値を = の左側に置くことはできません. c プログラミングにサインイン)

詳細については、 http://www.devx.com/tips/Tip/5696のリンクを参照 してください。rgds ソフティ

于 2012-05-18T05:13:48.993 に答える