C 語(yǔ)言系列教程:使用 malloc() 函數(shù)創(chuàng)建二維數(shù)組
malloc() 函數(shù)在 C 語(yǔ)言編程中用于將數(shù)據(jù)存儲(chǔ)在堆中,堆是動(dòng)態(tài)內(nèi)存存儲(chǔ)。多用于數(shù)組的動(dòng)態(tài)聲明,也可用于二維數(shù)組的創(chuàng)建。二維數(shù)組用于繪制具有列和行的表格形式的值。
在這篇文章中,我們將學(xué)習(xí)在 C 語(yǔ)言編程中使用 malloc() 函數(shù)創(chuàng)建一個(gè)二維數(shù)組。
什么是 C 語(yǔ)言編程中的 malloc() 函數(shù)
在一些特定的程序中,我們常常無(wú)法預(yù)測(cè)數(shù)組的大小。如果我們自己將值分配給數(shù)組,那么它在執(zhí)行期間無(wú)法更改。這會(huì)產(chǎn)生問(wèn)題,要么數(shù)組的內(nèi)存變低,要么數(shù)組占用更少的空間浪費(fèi)內(nèi)存,因此為避免這種情況,建議動(dòng)態(tài)分配數(shù)組。
在 C 語(yǔ)言編程中,對(duì)于動(dòng)態(tài)內(nèi)存分配,使用了不同的函數(shù)。其中之一是 malloc() 函數(shù);它向堆發(fā)送特定內(nèi)存塊的請(qǐng)求,如果堆有空間,它通過(guò)將請(qǐng)求的內(nèi)存塊分配給 malloc() 來(lái)響應(yīng)。
malloc() 會(huì)根據(jù)執(zhí)行程序的需要占用分配的內(nèi)存塊空間,執(zhí)行成功后,可以使用 free() 函數(shù)釋放該空間。
如何在 C 語(yǔ)言編程中使用 malloc() 函數(shù)創(chuàng)建二維數(shù)組
在創(chuàng)建之前,請(qǐng)考慮下圖以更好地理解二維數(shù)組的工作原理。
上圖中,我們可以理解,在一個(gè)二維數(shù)組中,先將元素固定在對(duì)應(yīng)的行被填充后的列的第一個(gè)框中,然后是列的第二行,一直到整個(gè)數(shù)組被填充,就像第一個(gè)元素將被放置在 x[0][0],然后是 x[0][1],然后是 [0][2],然后是 x[0][1],[1][ 0],以此類推。
我們將考慮以下在 C 編程中使用 malloc() 創(chuàng)建二維數(shù)組的基本示例。我們創(chuàng)建了一個(gè)文本文件 linuxmi.c 并在其中鍵入以下腳本:
#include <stdio.h>
#include <stdlib.h>
int main() {
int row = 5, col = 4;
int *a = (int *)malloc(row * col * sizeof(int));
int i, j;
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
*(a + i*col + j) = i + j;
printf("數(shù)組元素是:\n");
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
printf("%d ", *(a + i*col + j));
}
printf("\n");
}
free(a);
return 0;
}
要編譯上述程序,我們將使用 GCC 編譯器:
linuxmi@linuxmi:~/www.linuxmi.com$ gcc linuxmi.c -o linuxmi
執(zhí)行l(wèi)inuxmi,這是linuxmi.c的編譯文件,顯示輸出:
nuxmi@linuxmi:~/www.linuxmi.com$ ./linuxmi
如下圖:
在上面的代碼中,我們已經(jīng)包含了 stdlib.h(用于動(dòng)態(tài)內(nèi)存分配)和 stdio.h(用于輸入和輸出)的庫(kù),然后我們聲明了變量 row、column、i 和 j。聲明后,我們調(diào)用 malloc() 根據(jù)“行”和“列”的值分配內(nèi)存。分配內(nèi)存后,我們只需使用兩個(gè)嵌套循環(huán)將值保存在數(shù)組中,然后在嵌套循環(huán)中使用 printf() 顯示值。最后,我們使用free()清空了malloc()在堆上分配的占用空間。
結(jié)論
二維數(shù)組與一維數(shù)組類似,一維數(shù)組和二維數(shù)組的唯一區(qū)別是;二維數(shù)組以表格形式存儲(chǔ)數(shù)據(jù),一維數(shù)組以行的形式存儲(chǔ)數(shù)據(jù)。數(shù)組是數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ),它們可以存儲(chǔ)大量相同數(shù)據(jù)類型的數(shù)據(jù)。在本文中,我們通過(guò)調(diào)用 malloc() 函數(shù)解釋了在動(dòng)態(tài)內(nèi)存中創(chuàng)建二維數(shù)組。