1. 程式人生 > >c語言 動態陣列

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函式所分配的區域。
 

Code:
  1. #include <stdio.h> 
  2. #include <malloc.h> 
  3. #include <stdlib.h> 
  4. void main()    
  5. {    
  6. int *array = 0, num, i;    
  7.      printf("please input the number of element: ");    
  8.      scanf("%d", &num);    
  9. // 申請動態陣列使用的記憶體塊 
  10.      array = (
    int *)malloc(sizeof(int)*num);    
  11. if (array == 0)             // 記憶體申請失敗,提示退出 
  12.      {    
  13.          printf("out of memory,press any key to quit.../n");    
  14.          exit(0);             // 終止程式執行,返回作業系統 
  15.      }    
  16. // 提示輸入num個數據 
  17.       printf("please input %d elements: ", num);    
  18. for (i = 0; i < num; i++)    
  19.          scanf("%d", &array);    
  20. // 輸出剛輸入的num個數據 
  21.      printf("%d elements are: /n", num);    
  22. for (i = 0; i < num; i++)    
  23.          printf("%d,", array);    
  24.      printf("/b /n");    // 刪除最後一個數字後的分隔符逗號 
  25.      free(array);        // 釋放由malloc函式申請的記憶體塊 
  26. }