08_使用指標建立一維動態陣列@ 藍影
文章推薦指數: 80 %
對於之前”指標特輯”的前三篇文,在程式中讓人感覺實用意義 ... 08_使用指標建立一維動態陣列 ... (2.1) C語言使用malloc進行配置,語法為.
藍影
跳到主文
生命就是享受不停學習的過程..
部落格全站分類:數位生活
相簿
部落格
留言
名片
Sep11Fri200908:47
08_使用指標建立一維動態陣列
對於之前”指標特輯”的前三篇文,在程式中讓人感覺實用意義並不大,接下來要說的全都是重點,如果前三篇文沒有看懂的人,請先回去看懂吧。
1.為什麼要用動態記憶體:一般我們使用陣列時,你不可以隨時改變陣列的大小,陣列的大小在宣告時就已經確定。
所以不可能會有像以下的程式碼出現
intN=10;inta[N];//compliererrorN=20;a[N];//complier
但如果一開始我們就宣告陣列的大小,如果我們沒用那麼多的話就浪費,如果用太多、超過的話又會造成runtimeerror,怎麼辦呢?這就是為什麼要使用動態記憶體的原因了,因為動態配置陣列,可以隨心所欲的控制陣列的元素個數。
這篇暫以指標動態配置一維陣列為例。
2.配置動態記憶體注意事項:
假設我要配置的陣列大小為cnt個
(2.1)C語言使用malloc進行配置,語法為
資料型態*ptr; ptr=(資料型態*)malloc(sizeof(資料型態)*cnt);
如: double*ptr; ptr=(double*)malloc(sizeof(double)*cnt);
C++使用 new進行配置其語法為
資料型態*ptr; ptr=new資料型態[cnt];
如: double*ptr; ptr=newdouble[cnt];
(2.2)配置完後,和一般陣列的存取方式都一樣,你可以用*(ptr+i);也可以用ptr[i]方式進行存取。
(2.3)如果你已經用該指標配置了一塊記憶體空間(在這裡指的是陣列),那麼當你還要再進行一次新的配置時,記得把原本的記憶體空間給釋放出去,否則你的程式記憶體會愈吃愈大,最後將因記憶體空間不足而跳出。
C語言使用 free(ptr)進行釋放C++使用delete[]ptr進行釋放
最後,不論如何,只要有配置,就一定要釋放,一個malloc就配一個free,一個new就配一個delete。
3.程式範例-C
//====================================//FileName:Ptr1Dim_C.cpp//Author :Edison.Shih.//Complier:VC2008
#include
延伸文章資訊
- 1malloc、free、calloc 與realloc - OpenHome.cc
在這段程式中, malloc 會配置一個 int 需要的空間,並傳回該空間的位址,可以使用指標 p 來儲存位址,就C11 規範來說, malloc 只配置空間但不初始空間的值,若要在 ...
- 2給指標malloc分配空間後就等於陣列嗎? - w3c學習教程
不過既然這樣,那它應該算是個陣列吧。 所以,一般我們都用“動態陣列”這種名字來稱呼這種東西。 要講清楚這個東西,涉及到malloc函式,指標型別和“[ ] ...
- 3怎么定義指向指標陣列(malloc的空間)的指標? - 有解無憂
如 int *p=(int *)malloc(sizeof(int)); p就指向了int 型別的陣列。 像 int *p[10];這樣的陣列 怎么定義一個指標p,怎么malloc一塊空間回傳地...
- 4陣列與指標的關聯
陣列與指標在定義時, 使用記憶體不一 ... 拿到一個位址常數&a 或是指標變數ptr, 主要目標是運 ... int *z1=(int*) malloc(sizeof(int)*2); x[2...
- 5c語言: 什麼時候必用malloc而不直接宣告陣列? - iT 邦幫忙
譬如說要宣告一個5*4的 int 二維陣列, ... 是用malloc動態宣告陣列比直接宣告一個固定大小陣列恰當的例子呢? ... 這篇暫以指標動態配置一維陣列為例。