1

p次の宣言で左辺値であるかどうか、つまりp、この宣言の式であるかどうかを知りたいですか? (答えが「はい」の場合p、 value にあるオブジェクトの値を変更するため、左辺&p値です&n)。

unsigned char *p = &n;
4

3 に答える 3

4

Cは、スカラーの初期化について(私の強調)と言います。

(C99、6.7.8p11) "オブジェクトの初期値は式の初期値(変換後)です。単純な割り当てと同じ型の制約と変換が適用され、スカラーの型は宣言されたものの非修飾バージョンになります。タイプ。"

代入演算子の制約により、左側のオペランドは(変更可能な)左辺値でなければなりません。

また、用語としては、宣言は式でもステートメントでもありませんが、初期化子は式にすることができます。

于 2012-07-31T08:50:16.337 に答える
2

Stroustraps C++ の本の文法部分から判断すると、宣言ステートメントは式ステートメントではありません。それはクラシックCにも当てはまると思います。したがって、イニシャライザは式ですが、宣言全体は式ではありません。また、等号が付いているものは、厳密な意味での代入ではありません。代わりに、それは初期化であり、これはわずかに異なります。これと同じ理由で、p代入と初期化が多くの共通ルールを共有していても、実際には式ではありません。

于 2012-07-31T08:54:04.413 に答える
1

あなたの質問に対する簡単な答え:いいえ、宣言は表現ではありません。宣言には型を決定する式が含まれている場合がありますが、それだけであり、初期化子式も式です。

左辺値についてのあなたの質問は意味がないように見えます。表現ではないので価値がありません。

于 2012-07-31T08:55:00.243 に答える