日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C語言——malloc開辟矩陣-創(chuàng)新互聯(lián)

目錄

成都創(chuàng)新互聯(lián)10多年成都定制網(wǎng)站服務;為您提供網(wǎng)站建設,網(wǎng)站制作,網(wǎng)頁設計及高端網(wǎng)站定制服務,成都定制網(wǎng)站及推廣,對成都水處理設備等多個方面擁有多年的網(wǎng)站設計經(jīng)驗的網(wǎng)站建設公司。

用動態(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