2014-03-12 58 views
0

我正在學習C語言,我有一個關於動態內存分配的問題。
請考慮我有一個程序,用戶必須輸入數字或輸入字母「E」才能退出程序。 用戶輸入的數字必須存儲在一維數組中。該陣列從一個位置開始。
我該怎麼做,以增加我的整數數組到每個數字,用戶輸入這個數字在這個新的位置?我認爲我必須使用指針正確嗎?然後,如何打印存儲在數組中的值?
我發現所有的例子對於初學者來說都很複雜。我讀了關於malloc和realloc函數,但我不知道究竟要使用哪一個。
任何人都可以幫我嗎?謝謝!如何在運行時在C中展開一維數組?

void main() { 
    int numbers[]; 

    do { 
     allocate memory; 
     add the number to new position; 
    } while(user enter a number) 

    for (first element to last element) 
     print value; 
} 

回答

4

如果您需要在運行時擴展數組,您必須動態分配內存(在堆上)。爲此,您可以使用malloc或更適合您的情況,realloc

這個頁面在這裏,我想在一個很好的例子描述了你想要的東西:http://www.cplusplus.com/reference/cstdlib/realloc/

複製從上面的鏈接粘貼:

/* realloc example: rememb-o-matic */ 
#include <stdio.h>  /* printf, scanf, puts */ 
#include <stdlib.h>  /* realloc, free, exit, NULL */ 

int main() 
{ 
    int input,n; 
    int count = 0; 
    int* numbers = NULL; 
    int* more_numbers = NULL; 

    do { 
    printf ("Enter an integer value (0 to end): "); 
    scanf ("%d", &input); 
    count++; 

    more_numbers = (int*) realloc (numbers, count * sizeof(int)); 

    if (more_numbers!=NULL) { 
     numbers=more_numbers; 
     numbers[count-1]=input; 
    } 
    else { 
     free (numbers); 
     puts ("Error (re)allocating memory"); 
     exit (1); 
    } 
    } while (input!=0); 

    printf ("Numbers entered: "); 
    for (n=0;n<count;n++) printf ("%d ",numbers[n]); 
    free (numbers); 

    return 0; 
} 

注意,數組的大小是用記憶count變量

相關問題