2011-11-06 4 views

답변

3

실제 배열을 사용할 수 없습니다. 당신은 포인터로 작업을 수행 할 수 있습니다

int *p; 

int main(int argc, char *argv[]) 
{ 
    size_t x; 
    if (argc < 2) 
     return; 

    size_t x = strtoul(argv[1], NULL, 10); 
    p = malloc(x * sizeof *p);  

    return 0; 
} 
+0

+1 멋진! 요소에 어떻게 액세스 할 수 있습니까? 'p [0] p [1] ... p [n]'과 같은가요? –

+0

@ Eng.Fouad 그건 그렇고. 대부분의 경우 배열처럼 사용할 수 있습니다. 하지만 ** [배열이 아닙니다] (http://c-faq.com/aryptr/aryptr2.html) **를 기억하십시오. – cnicutar

2

당신은 당신이 그것을 선언 배열의 길이를 알 수 없습니다 때문에 동적으로 할당 된 배열해야 할 것이다.

(많은 컴파일러는 [N]하는 int 수있는 확장 기능을 가지고 있지만,이 경우에만) (주에서 배열에 액세스하고 싶었 경우에도 해당 될 것이라고 주)

int * myarray; 
int myarray_count; 
int main(int argc, const char * const * argv) 
{ 
    myarray_count = atoi(argv[1]); 
    myarray = malloc(myarray_count * (sizeof myarray[0])); 
    // ... 
    return 0; 
} 

이후에서 myArray '수 t 정적 배열이므로 sizeof myarray는 할당 된 배열의 크기를 반환하지 않으므로 배열의 개수와 함께 유지해야합니다.

+2

참고로, function scope의 int a [n];은 확장이 아닙니다. 그것은 "가변 길이 배열"이라고 불리우며 1999 년 이래로 C 표준에 없어서는 안될 부분입니다. –

0
int *a; 
int a_c; 
int main(int argc, char *argv[]) 
{ 
    int i=0; 

    if (argc < 2) 
     return; 
    a_c= atoi(argv[1]); 
    a= malloc(a_c* (sizeof(int))); 
    // ... 
    for(i=0;i<a_c;i++) 
    { 
    printf("\n %d",a[i]); 
    } 

return 0; 
} 
관련 문제