新聞中心
目錄

用動態(tài)內(nèi)存開辟矩陣
矩陣初始化
用動態(tài)內(nèi)存開辟矩陣
動態(tài)內(nèi)存更多的知識在這篇博客,本文將介紹用malloc開辟矩陣。
malloc是C語言中用來動態(tài)開辟內(nèi)存的,通過malloc函數(shù)可以向計算機申請一串連續(xù)的內(nèi)存空間。
因為malloc開辟的內(nèi)存在堆上,不會隨函數(shù)的聲明周期結(jié)束而銷毀,因此當該內(nèi)存不再使用時,需要用free進行內(nèi)存釋放。?
malloc和free使用的基本方式:
- void* malloc (size_t size);
- void free (void* ptr);
- size是指定的開辟內(nèi)存的大小,單位是字節(jié)
- size_t的無符號整型則限制程序員誤操作開辟負字節(jié)的空間
- 如果開辟成功,malloc會返回一個void*類型的指針
- 如果開辟失敗,則返回的是空指針,所以在malloc之后需要對指針進行檢查
- 當malloc的東西不再使用時,需要free對其進行釋放,否則會造成內(nèi)存泄漏
- malloc和free均需要包含頭文件
malloc開辟二維矩陣的示例:
以函數(shù)的形式表達:輸入row行,col列,開辟矩陣并返回指針
double** Make_Matrix(int row,int col)
{
int i, j;
double** arr = (double**)malloc(sizeof(double*) * row);
if (arr != NULL)
{
for (i = 0; i< row; i++)
{
arr[i] = (double*)malloc(sizeof(double) * col);
}
}
return arr;
}以上代碼可以這樣理解:
?
- 計算機申請了row個double*類型的內(nèi)存,創(chuàng)建一個二級指針arr接收這串內(nèi)存空間的地址。
- 計算機申請了col個double類型的內(nèi)存,將其地址賦給arr中的第i個元素。
- 重復row次,row行col列的矩陣開辟完畢
- arr記錄著矩陣首元素的地址;arr[i]中記錄著每行首元素的地址;arr[i][j]記錄著矩陣中的元素
開辟完矩陣后,還不能立即進行計算,還需要對矩陣進行初始化。
矩陣初始化矩陣的初始化一般指的是將矩陣全部初始化為0,可以使用內(nèi)存函數(shù)memset。memset只適合矩陣的清零操作,為矩陣每個元素賦值需要for循環(huán)遍歷。
memset
memset這個函數(shù)通常為新申請的內(nèi)存做初始化工作,作用是在一段內(nèi)存塊中填充某個給定的值,它是對較大的結(jié)構(gòu)體或數(shù)組進行清零操作的一種最快方法。
void * memset ( void * ptr, int value, size_t num );
- ptr為起始位置
- value為要賦的值,只能是字符,0或者-1
- num為賦值的個數(shù),單位為字節(jié)
void Init_Matrix(double**arr)
{
int i;
int row= (int)_msize(arr) / (int)sizeof(double*);
for (i = 0; i< row; i++)
{
memset((arr[i]), 0, _msize(*arr));
}
}上述代碼中:
- 把每個arr[i]中存儲指針指向的內(nèi)存,全部設置成0
- _msize(*arr)表示一行有多少個字節(jié)
- 如果將arr傳入memset,memset會把arr中的原本存儲指針的元素置為0,造成內(nèi)存泄漏
傳統(tǒng)遍歷法
void Init_Matrix(double** arr)
{
int i, j;
int row = (int)_msize(arr) / (int)sizeof(double*);
int col = (int)_msize(*arr) / (int)sizeof(double);
for (i = 0; i< row; i++)
{
for (j = 0; j< col; j++)
{
arr[i][j] = 0;
}
}
}你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
文章名稱:C語言——malloc開辟矩陣-創(chuàng)新互聯(lián)
分享地址:http://www.dlmjj.cn/article/eihsj.html


咨詢
建站咨詢
