2011-11-06 42 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

因爲當你聲明它時你不會知道數組的長度,所以它必須是一個動態分配的數組。

(請注意,這將是真實的,即使你只是想訪問在main()的陣列,儘管許多編譯器有擴展,允許INT A [N];)

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

只是一個附註,'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; 
} 
相關問題