語言的動態陣列與靜態陣列

2021-06-14 10:23:47 字數 1209 閱讀 9362

近來編寫幾個程式,很多都用到了陣列。但是對於陣列的大小卻是沒有固定的,也就是說可以更改陣列大小,其大小是可以變化的。並不像初學時的那樣,告訴你乙個範圍,你就必須取最大值以滿足要求。那樣可能就會浪費很多不必要的記憶體單元!那麼到底應該怎樣定義乙個動態陣列列?

在陣列一章中,曾介紹過陣列的長度是預先定義好的, 在整個程式中固定不變。c語言中不允許動態陣列型別。例如: int n;scanf("%d",&n);int a[n]; 用變數表示長度,想對陣列的大小作動態說明, 這是錯誤的。但是在實際的程式設計中,往往會發生這種情況, 即所需的記憶體空間取決於實際輸入的資料,而無法預先確定。對於這種問題,用陣列的辦法很難解決。為了解決上述問題,c語言提供了一些記憶體管理函式,這些記憶體管理函式可以按需要動態地分配記憶體空間,也可把不再使用的空間**待用,為有效地利用記憶體資源提供了手段。其它文獻中所提到的"動態陣列",指的就是利用記憶體的申請和釋放函式,在程式的執行過程中,根據實際需要指定陣列的大小.其本質是乙個指向陣列的指標變數.常用的記憶體管理函式有以下三個:

1.分配記憶體空間函式malloc

呼叫形式: (型別說明符*) malloc (size) 功能:在記憶體的動態儲存區中分配一塊長度為"size" 位元組的連續區域。函式的返回值為該區域的首位址。「型別說明符」表示把該區域用於何種資料型別。(型別說明符*)表示把返回值強制轉換為該型別指標。「size」是乙個無符號數。例如: pc=(char *) malloc (100); 表示分配100個位元組的記憶體空間,並強制轉換為字元陣列型別, 函式的返回值為指向該字元陣列的指標, 把該指標賦予指標變數pc。

2.分配記憶體空間函式 calloc

calloc 也用於分配記憶體空間。呼叫形式: (型別說明符*)calloc(n,size) 功能:在記憶體動態儲存區中分配n塊長度為「size」位元組的連續區域。函式的返回值為該區域的首位址。(型別說明符*)用於強制型別轉換。calloc函式與malloc 函式的區別僅在於一次可以分配n塊區域。例如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(structstu)是求stu的結構長度。因此該語句的意思是:按stu的長度分配2塊連續區域,強制轉換為stu型別,並把其首位址賦予指標變數ps。

3.釋放記憶體空間函式free

呼叫形式: free(void*ptr); 功能:釋放ptr所指向的一塊記憶體空間,ptr 是乙個任意型別的指標變數,它指向被釋放區域的首位址。被釋放區應是由malloc或calloc函式所分配的區域。

靜態陣列和動態陣列的區別

靜態陣列在記憶體中位於棧區,是在定義時就已經在棧上分配了固定大小,在執行時這個大小不能改變,如 int a 10 在函式執行完以後,系統自動銷毀 動態陣列是malloc或者new出來的,位於記憶體的堆區,它的大小是在執行時給定,並且可以改變其,如 int a a new int 10 動態陣列,其建...

靜態陣列和動態陣列的區別

靜態陣列在記憶體中位於棧區,是在定義時就已經在棧上分配了固定大小,在執行時這個大小不能改變,如 int a 10 在函式執行完以後,系統自動銷毀 動態陣列是malloc或者new出來的,位於記憶體的堆區,它的大小是在執行時給定,並且可以改變其,如 int a a new int 10 動態陣列,其建...

陣列與動態陣列

int main other element will be set as the default value 2.get length int size sizeof a1 sizeof a1 cout the size of a1 is size endl 3.access element co...