c語言 動態陣列
方法一、
c99中有動態陣列(已用DEV -C++測試過),例如
int n;
scanf("%d", &n);
int array[n];
c89不能這麼用
方法二、
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(struct stu)是求stu的結構長度。因此該語句的意思是:按stu的長度分配2塊連續區域,強制轉換為stu型別,並把其首地址賦予指標變數ps。
3.釋放記憶體空間函式free
呼叫形式: free(void*ptr); 功能:釋放ptr所指向的一塊記憶體空間,ptr 是一個任意型別的指標變數,它指向被釋放區域的首地址。被釋放區應是由malloc或calloc函式所分配的區域。
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- void main()
- {
- int *array = 0, num, i;
- printf("please input the number of element: ");
- scanf("%d", &num);
- // 申請動態陣列使用的記憶體塊
- array = (
- if (array == 0) // 記憶體申請失敗,提示退出
- {
- printf("out of memory,press any key to quit.../n");
- exit(0); // 終止程式執行,返回作業系統
- }
- // 提示輸入num個數據
- printf("please input %d elements: ", num);
- for (i = 0; i < num; i++)
- scanf("%d", &array);
- // 輸出剛輸入的num個數據
- printf("%d elements are: /n", num);
- for (i = 0; i < num; i++)
- printf("%d,", array);
- printf("/b /n"); // 刪除最後一個數字後的分隔符逗號
- free(array); // 釋放由malloc函式申請的記憶體塊
- }