2014-09-03 67 views
0

我只是想問,是否有任何方法可以在運行時爲C中的現有元素數組動態分配內存?例如..如果我聲明int arr [25];那麼我可以在我的數組中使用最多25個整數。但是如果用戶想要輸入更多整數,但是我們事先不知道有多少?我也不想通過分配類似int arr [500]的東西來浪費內存;只是爲了確保用戶不超過我的數組的上限:(我真的很困惑和傷心,因爲我無法找到這個解決方案..是否C甚至支持這樣的事情?如果不是然後在哪個編程語言能更容易地解決這樣的問題?PS->我是編程新手,所以我很抱歉,如果這是一個菜鳥問題:/爲C中的數組動態分配內存C

+3

你已經用C和C++標記了這個問題,但你的問題文本只提到C.C和C++的正確答案會有很大的不同。你問哪一個?請修改您的問題以刪除錯誤的標記。 – Angew 2014-09-03 17:17:35

+0

[C動態增長數組]的可能重複(http://stackoverflow.com/questions/3536153/c-dynamically-growing-array) – Sneftel 2014-09-03 17:17:38

+0

如果你是C的新手,我會強烈推薦Steve C * Primer Plus *煎餅。第5版約爲$ 30,幾乎到處都是(http://www.amazon.ca/C-Primer-Plus-5th-Edition/dp/0672326965),並具備快速啓動和運行所需的一切。我在幾年前的一個長週末閱讀了它的舊版本。奇妙的介紹C. C. – DevNull 2014-09-03 17:42:09

回答

2

,如果它是你實際上可能要檢查的釋放calloc()函數的數組:

void* calloc (size_t num, size_t size); 

它可以用於像這樣:

/* calloc example */ 
#include <stdio.h>  /* printf, scanf, NULL */ 
#include <stdlib.h>  /* calloc, exit, free */ 

int main() 
{ 
    int i,n; 
    int * pData; 
    printf ("Amount of numbers to be entered: "); 
    scanf ("%d",&i); 
    pData = (int*) calloc (i,sizeof(int)); 
    if (pData==NULL) exit (1); 
    for (n=0;n<i;n++) 
    { 
    printf ("Enter number #%d: ",n+1); 
    scanf ("%d",&pData[n]); 
    } 
    printf ("You have entered: "); 
    for (n=0;n<i;n++) printf ("%d ",pData[n]); 
    free (pData); 
    return 0; 
} 

如果需要調整陣列稍後再看看realloc函數。 (是的,它確實保持原始數據,如果succesfull)

+0

不會投出malloc或calloc結果,包含正確的頭文件 – Ulterior 2014-09-03 17:23:06

+0

取決於您的編譯器是C還是真正的C++編譯器。投下真正的C編譯器。 – AnthonyLambert 2014-09-03 17:28:29

3

你需要使用malloc做動態內存分配()/ realloc()的,並使用免費()一旦你完成其釋放。

int* a = malloc(25*sizeof(int)); 

//use a like array...a[0]...to a[24] 

// realloacte if you need to grow it 
a = realloc(a,50); 

free(a); 

上述邏輯應在C.如果編寫成C++中使用,則應該使用STL std::vector<T>

1

c++有一門課程,您可能會覺得有用,它被稱爲vector。您可以添加到矢量的前面:myVector.push_front(myElement)並添加到矢量的末尾:myVector.push_back(myElement)。如果這種類型的功能對您非常重要,我會推薦使用c++vector

或者,您可以使用c中的malloc()函數在運行時請求特定數量的內存:char *five_chars = malloc(sizeof(char) * 5)。完成記憶後,請務必致電free(five_chars)

+0

sizeof(char)是多餘的,因爲它始終是1. – Igor 2014-09-03 17:30:11