2016-06-15 49 views
-1

我無法理解下面的代碼。enum無法理解內存和功能

#include<stdio.h> 
enum x_t{a,b,c,d}; 
main() 
{ 
enum y{ x=3}; 
a=x; 
printf("a=%d\n",a); 
printf("x=%d\n",x); 
printf("c=%d\n",c); 
} 

點什麼我不清楚是: 1 - 爲什麼枚舉不能被分配到其他枚舉,他們是常數如果不是常量,然後我可以指定一個數字來枚舉? 2 - 當我們可以直接訪問一個沒有x_t的值時,需要爲枚舉分配一個標籤,我知道它是用於設計中的標識符目的,但是如果有的話,是否會有任何分配此標籤的內存?在數據段中分配?

我可以這樣做下面的代碼,這是第一點要求。

#include<stdio.h> 
enum x_t{a,b,c,d}; 
main() 
{ 
a=3; 
printf("a=%d\n",a); 
printf("x=%d\n",x); 
printf("c=%d\n",c); 
} 

請幫我理解enum的內存結構,爲什麼它的行爲不變。 錯誤我得到的是需要作爲分配的左操作數

左值

+1

這個問題真的是「什麼是枚舉?」這是你應該從C教程獲得的東西,而不是SO帖子。 –

回答

1

enum s爲正是:字面常量。它們不是可以改變的變量。

如果要將某些標識符與對方相關聯,則可以使用enum。經典是一個撲克牌的花色:

enum Suits { Clubs, Diamonds, Hearts, Spades }; 

這意味着,在你的代碼,你可以說suit = Hearts;,或他們像if (suit1<suit2)什麼的比較。但Hearts = Diamonds;沒有意義。

作爲實施細節,Clubs將得到值0,並且下一個將獲得連續值。如果你想,你可以改變這一點:

enum Suits { Clubs=1, Diamonds/*=2*/, // Diamonds gets 2 anyway: it's the next value 
      Hearts=4, Spades=8 }; 

C和C++,不過,如果你要輸出你會得到它的數字等效值:不是字符串。爲了做到這一點,你必須自己組織。假設原始定義:

enum Suits { Clubs, Diamonds, Hearts, Spades }; 
char suitSymbolA[] = { '\5', '\4', '\3', '\6' }; // ASCII version 
wchar_t suitSymbolU[] = { L'♣', L'♦', L'♠', L'♠' }; // Unicode version 
char *suitString[] = { "Clubs", "Diamonds", "Hearts", "Spades" }; 
+0

'char suitSymbol'不會工作,除非你使用CP437或類似的東西。 –

+0

@Dietrich好點!固定... –

+0

但我期待傳遞值枚舉運行時在代碼中的變量,是否有可能? – torban