p
次の宣言で左辺値であるかどうか、つまりp
、この宣言の式であるかどうかを知りたいですか? (答えが「はい」の場合p
、 value にあるオブジェクトの値を変更するため、左辺&p
値です&n
)。
unsigned char *p = &n;
p
次の宣言で左辺値であるかどうか、つまりp
、この宣言の式であるかどうかを知りたいですか? (答えが「はい」の場合p
、 value にあるオブジェクトの値を変更するため、左辺&p
値です&n
)。
unsigned char *p = &n;
Cは、スカラーの初期化について(私の強調)と言います。
(C99、6.7.8p11) "オブジェクトの初期値は式の初期値(変換後)です。単純な割り当てと同じ型の制約と変換が適用され、スカラーの型は宣言されたものの非修飾バージョンになります。タイプ。"
代入演算子の制約により、左側のオペランドは(変更可能な)左辺値でなければなりません。
また、用語としては、宣言は式でもステートメントでもありませんが、初期化子は式にすることができます。
Stroustraps C++ の本の文法部分から判断すると、宣言ステートメントは式ステートメントではありません。それはクラシックCにも当てはまると思います。したがって、イニシャライザは式ですが、宣言全体は式ではありません。また、等号が付いているものは、厳密な意味での代入ではありません。代わりに、それは初期化であり、これはわずかに異なります。これと同じ理由で、p
代入と初期化が多くの共通ルールを共有していても、実際には式ではありません。
あなたの質問に対する簡単な答え:いいえ、宣言は表現ではありません。宣言には型を決定する式が含まれている場合がありますが、それだけであり、初期化子式も式です。
左辺値についてのあなたの質問は意味がないように見えます。表現ではないので価値がありません。