當前位置:編程學習大全網 - 編程語言 - 創建線性表的順序存儲結構,除了用數組,用malloc calloc都能實現嗎

創建線性表的順序存儲結構,除了用數組,用malloc calloc都能實現嗎

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

在數組壹章中,曾介紹過數組的長度是預先定義好的, 在整個程序中固定不變。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(struct stu)是求stu的結構長度。因此該語句的意思是:按stu的長度分配2塊連續區域,強制轉換為stu類型,並把其首地址賦予指針變量ps。

3.釋放內存空間函數free

調用形式: free(void*ptr); 功能:釋放ptr所指向的壹塊內存空間,ptr 是壹個任意類型的指針變量,它指向被釋放區域的首地址。被釋放區應是由malloc或calloc函數所分配的區域。

----------------------------------------------------------------------------------------------------------------------------------

// 程 式 名: DynamicArray.c

// 程式功能: 動態數組的實現

// 功能描述: 動態數組的創建與使用

#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 = (int *)malloc(sizeof(int)*num);

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[i]);

// 輸出剛輸入的num個數據

printf("%d elements are: \n", num);

for (i = 0; i < num; i++)

printf("%d,", array[i]);

printf("\b \n"); // 刪除最後壹個數字後的分隔符逗號

free(array); // 釋放由malloc函數申請的內存塊

}

望采納,謝謝

  • 上一篇:德國未來壹流黑豹式戰車
  • 下一篇:機器人科普活動主持詞
  • copyright 2024編程學習大全網