建立動態陣列

small_planet發表於2020-10-10

  我們在剛開始學陣列的時候大都會犯這麼一個小錯誤:int a[n],執行後就會出現bug,也就是說,C語言不允許對陣列的大小做動態定義。這個規則使得我們在解決一些問題的時候很不方便,動態的陣列就很好地解決了這一問題,下面就來看看動態陣列。

 用到的函式:malloc(),free():

  標頭檔案:#includ<malloc.h>;

  malloc函式的引數為所需申請記憶體的大小:以位元組為單位;

  malloc函式返回一個void*型別的地址,必須通過強制型別轉 換,才能賦值給特定的指標變數: n int * pint = (int *) malloc( ... );

  用malloc函式生成各種型別的動態陣列,最好使用 “sizeof(型別名) * 動態陣列長度”形式確定分配記憶體的大小: n int * pint = (int *) malloc( sizeof(int) * 100 );

  分配的記憶體不再使用時一定要釋放: free();

  

上程式碼:

建立動態一維字元陣列

#include<stdio.h>
#include<malloc.h>
int main()
{
	int n, i;
	char *a;
	scanf("%d", &n);
	getchar();
	a = (char *)malloc(sizeof(char)*n);
	for (i = 0; i < n; i++)
		scanf("%c", &a[i]);
	for (i = 0; i < n; i++)
		printf("%c", a[i]);
	free(a);
}

 建立二維整形陣列:

#include<stdio.h>
#include<malloc.h>
int main()
{   
    int n,m,i, j;
	int **a;
	scanf("%d %d", &n,&m);
	a = (int **)malloc(sizeof(int)*n);
	for (i = 0; i < n; i++)
		a[i] = (int *)malloc(sizeof(int)*m);
	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
			scanf("%d", &a[i][j]);
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
			printf("%d ", a[i][j]);
		printf("\n");
	}
    for (i = 0; i < n; i++)
		free(a[i]);
	free(a);
}

 

相關文章