2016-11-19 1 views
0

C에서 대용량 스파 스 배열을 어떻게 편리하게 초기화 할 수 있습니까? 아래의 코드는 작동하지만 대용량 배열의 경우 다루기 힘들어집니다. 기본적으로 하나의 오류로 인해 완전히 새로운 방식입니다! 예를 들어 인덱스 7, 62, 100 및 189에있는 1을 제외하고 길이 200의 배열을 모두 0으로 만들려면 어떻게해야합니까? 값은 컴파일 타임에 알려집니다. 매크로가 배열을 생성 할 수 있는지 궁금합니다.C에서 스파 스 상수 배열 초기화

const char myArray[] = {0,0,1,0,0,0,0,0,1,0}; 

This 문제는 C++입니다,하지만 어쩌면 구조와 트릭은 C에서 작동합니다.

+0

초기화는 C에서 모두 또는 아무 것도 아닙니다. 표기법에 단축키가 있지만 결과는 여전히 전부 또는 일부입니다. 귀하의 목표는 짧은 표기법입니까, 아니면 부분 초기화입니까? – chux

답변

6

나는 그것을 달성하기 위해 매크로를 작성하는 방법을 모르지만, 당신은 C99 이상을 사용하는 경우, 당신은 다음과 같이 지정된 이니셜 라이저를 사용할 수 있습니다 : 당신은 C99이있는 경우

const char myArray[200] = { 
    [7] = 1, 
    [62] = 1, 
    [100] = 1, 
    [189] = 1 
}; 
+1

좋은 소식! '명시 적으로 초기화되지 않은 집계의 멤버는 기본적으로 0으로 초기화됩니다 .' – bruceg

0

것은 여기에 다른 대답을 사용해야합니다 , 그렇지 않은 경우 ...

코드 생성을 사용하십시오. 파이썬 마코 (Python Mako) 나 평범한 파이썬 (Python)을 사용했다. 당신은 단지 C89를 사용하는 경우

, 내가 이런 짓을 했을까 :

#define TEN_ZEROS 0,0,0,0,0,0,0,0,0,0 

const char myArray[] = { 
    0,0,0,0,0,0,0,1,0,0, 
    TEN_ZEROS, 
    TEN_ZEROS, 
    TEN_ZEROS, 
    TEN_ZEROS, 
    TEN_ZEROS, 
    0,1 /*...*/ 
}; 
0

표준 garanties을 당신은 크기가 정의되어 있으며 부분적으로 remainings 그래서 0

로 설정 얻을이 배열을 초기화하기 경우
int myarray[200]={0}; //this set all the array to 0; 
myarray[7]=23; 
    .... 
그렇지 않으면

static int myarray[200]; //also all the static variable get set to 0 
    myarray[7]=23; 

또는 마지막

memeset(myarray, 0, sizeof(myarray)) 
    myarray[7]=23; 

는이 당신이 무슨 짓을했는지 istantly 분명하기 때문에 모두가 목록 또는 다른 솔루션으로 선호하고, 경우 (확실히 확인하기 어려운 200 개 항목의 목록) 잘못된 항목을 initalize 할 위험이 없다 당신은 뭔가를 바꿔야 만합니다. 정확한 색인을 정확하게 바꾸는 것이 아주 빠릅니다.