0
#include<stdio.h>

typedef enum {a,b,c}key;

int main()
{
 key d=3;
 printf("%p\n,&a);
 printf("%p\n",&d);
 printf("%d\t %d\t %d\t %d\n",a,b,c,d);
 return 0;
}

a、b、または c のいずれかのアドレスを取得しようとすると、コンパイラは単項 & に左辺値が必要であるというエラーをスローします。

同じタイプの d で機能しているため、取得できませんでした。ここで何が起こっているのですか?これらの定数またはコンパイラによって値 0 1 および 2 が割り当てられた const 変数です。この種のエラーは定数に対してのみ発生するためです。助けてください、私はCが初めてです

4

4 に答える 4

4

列挙型が実際に何であるかを確認してください。それは価値です。列挙型リストを初期化しない場合、最初のリストには値が与えられることに注意してください0

ブール列挙型の例を考えてみましょう。

typedef enum /* Declares an enumeration data type called BOOLEAN */
{
    false,     /* false = 0, true = 1 */
    true 
}BOOLEAN ; 

したがって、列挙型「false」は0です。アドレス0を取得することはできませんが、これから「BOOLEAN」を作成すると、次のようになります。

BOOLEAN something = false; 

これで、何かが変数になり、そのアドレスを取得できます。

于 2012-10-18T11:22:10.777 に答える
1

a、b、c は、列挙内の定数整数の記号です。アドレスを持つための変数ではありません。したがって、ここでは & を使用できません (つまり、右辺値のみを意味します)。

于 2012-10-18T11:17:21.857 に答える
1

enum のメンバーは定数 (3、1000、または 'b' と同様) であるため、右辺値としてのみ使用できます。メモリ内に場所がありません。

しかしd、値が列挙型メンバーの 1 つである変数です (必ずしもそうとは限りません)。d明確に定義されたメモリ位置があり、左辺値として使用できます (アドレスを取得したり、変更したりできます)。

于 2012-10-18T11:17:53.797 に答える
0

Anenumは整数型のようなものですが、名前付きリテラルがたくさんあるという利点があります。列挙は、一連の名前付き整数定数値で構成されます。

C 標準 C99 から。セクション 6.7 セマンティクス、ポイント 3:

列挙定数または typedef 名の場合、識別子の (唯一の) 宣言です。

したがって、それは単なる宣言です。メモリは割り当てられません。

于 2012-10-18T11:19:02.433 に答える