2013-07-16 7 views
0

255 개의 요소 배열이 있습니다. 이 배열에 100 개의 값을 저장해야합니다. 예를 들어, 장미, 빨강, 쥐 3 개 항목이있는 경우 arr[0]rose을 나타내야하고, arr[1]redarr[2]rat으로 나타내야합니다. 그런 다음이 값은 arr[0] = 100, arr[1] = 200, arr[2] = 300으로 지정됩니다. 이제 rat 값을 얻으려는 경우 인덱스에 직접 액세스하여 값을 얻을 수 있어야합니다. 즉 arr[2]=300. 내 생각은 매크로를 만들고 각 항목에 값을 할당하고 배열의 값에 직접 액세스하는 것입니다. 예 :배열 색인 액세스

#define ROSE 0 
#define RED 1 
#define RAT 2 

그리고 직접 rat 위해 나는 값을 얻을 수 arr[RAT]을 말할 것이다. 이 100 항목에 대한 좋은 접근인가요? ADDITION: 이제 항목 값의 크기가 다른 경우 어떻게됩니까? 예를 들어. red은 4 바이트 값을 가지고 rat은 2 바이트 값을 가지므로 uint8 arr[255];redarr[1]에서 시작해야하고 ratarr[5]에서 시작해야합니다. 열거 형은 여전히 ​​여기서 작동합니까?

+1

100 개의 값만 저장하는 경우 배열에 255 개의 요소가있는 이유는 무엇입니까? – Barmar

답변

2

또한 C Enumeration Declarations, enums 사용할 수 있습니다.

일반적으로이 종류의 상수 (많은 상수는 비슷한 유형)의 경우 매크로를 사용하지 않습니다. 나는 그것이 enum 인 사용자 정의 도메인을 가진 유형이어야한다고 생각한다.

열거 형은 명명 된 정수 상수 집합으로 구성됩니다. 열거 형 선언은 (선택적) 열거 태그의 이름을 지정하고 "열거 집합", "열거 자 상수", "열거 자"또는 "구성원"이라고하는 명명 된 정수 식별자 집합을 정의합니다. 을 추가로 정의 enum에 좋은 아이디어를

그것은 될 것입니다 : 내 대답에 아주 좋은 포인트를 추가로 junix @

#define SIZE 100; 

int arr[SIZE] 

감사 : 나는 배열 크기에 대한 선호

매크로 요소의 총수를주는 마지막 요소.:

typedef enum { rose, 
       red, 
       rat, 
       /* add new elements here */ 
       item_count 
     } index; 

지금 내 열거 도메인 범위는 [0, item_count]이며, 우리는 같은 예를 들어 item_count 값을 사용할 수 있습니다 :

int arr[item_count]; 

과의-물론이 혜택은 우리가 매크로 없어!

enum {ROSE, RED, RAT, ...} 

그것은 더 나은 당신의 의도를 표현 :

+3

예를 들어 마지막 요소를 추가하는 것을 선호합니다. "item count": typedef enum {rose, red, rat,/* 여기에 새 요소를 추가하십시오 */item_count} index; 이렇게하면 매번 매크로를 유지할 필요없이 명명 된 값을 사용하여 배열을 선언 할 수 있습니다 열거 형에 항목을 추가하십시오 :'int arr [item_count];' – junix

+0

@junix 아주 좋네요! 내 대답에 추가 할 수 있습니다 :) –

+2

물론. 그것이 내가이 주석을 추가 한 이유입니다. 그래서 기꺼이 그렇게 해주세요 :-) – junix

2

대신에 열거를 사용하는 것이 더 나은 방법이 될 수 있습니다

enum Item { 
    ROSE = 0, 
    RED = 1, 
    RAT = 2 
}; 
arr[RAT]=300 

enum 구조 (새로운 item를 추가 할 새 항목을 삽입하고 다른 사람의 인덱스를 증가) 확장하기 쉽다. 매크로를 사용하는 경우 수동으로해야합니다.

typedef enum {rose, red, rat} index; 

지금 코드에서 당신이 == arr[2]입니다 arr[rat]에 액세스 할 수 있습니다

1

당신은 열거를 사용해야합니다. 당신은 다른 태그가 다른 가치를 얻을 것이라고 확신합니다. 또한 나중에 스위치를 사용하면 색인을 잊어 버린 경우 경고 메시지가 나타납니다.

0

실제로 이것은 hash table의 이상적인 후보로 들립니다.

매크로 정의 또는 열거 형인지 여부에 관계없이 별도의 기호 100 개를 유지해야하는 것이 고통 스러울 것입니다.