bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

【C語言進(jìn)階】動態(tài)內(nèi)存不知道怎么用?當(dāng)然是結(jié)合柔性數(shù)組一起用-創(chuàng)新互聯(lián)

目錄

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了突泉免費(fèi)建站歡迎大家使用!

🍊前言🍊:

🥝正文:柔性數(shù)組🥝:

? 1.柔性數(shù)組的特點(diǎn):

? 2.柔性數(shù)組的使用:

? 3.柔性數(shù)組的優(yōu)勢:

🍒總結(jié)🍒:


🛰?博客主頁:??鑾同學(xué)的干貨分享基地

🛰?歡迎關(guān)注:👍點(diǎn)贊🙌收藏??留言

🛰?系列專欄:💐【進(jìn)階】C語言學(xué)習(xí)

🛰?代碼倉庫:🎉VS2022_C語言倉庫

? 家人們更新不易,你們的👍點(diǎn)贊👍和👉關(guān)注👈真的對我真重要,各位路過的友友麻煩多多點(diǎn)贊關(guān)注,歡迎你們的私信提問,感謝你們的轉(zhuǎn)發(fā)!

?關(guān)注我,關(guān)注我,關(guān)注我,你們將會看到更多的優(yōu)質(zhì)內(nèi)容?。?/p>


🏡🏡本文重點(diǎn)🏡🏡:

🚅柔性數(shù)組特點(diǎn)🚃柔性數(shù)組使用🚃柔性數(shù)組優(yōu)勢🚏🚏

🍊前言🍊:

? 在上一篇文章中,我們通過幾個函數(shù)的使用,實現(xiàn)了對動態(tài)內(nèi)存空間的創(chuàng)建、修改和釋放,使我們的內(nèi)存空間成功的“ 動態(tài) ”了起來,而今天我們將通過柔性數(shù)組的介紹和使用,真正讓我們的動態(tài)內(nèi)存空間得以應(yīng)用。

🥝正文:柔性數(shù)組🥝:

? 或許很多人,甚至包括一些已經(jīng)參加工作了的老程序員,都未曾聽過柔性數(shù)組(flexible array)這個概念,但是它又是確實存在的,并且它的存在對于我們進(jìn)行動態(tài)內(nèi)存管理有著巨大的作用。在 C99 標(biāo)準(zhǔn)中,結(jié)構(gòu)中的最后一個元素的大小允許是位置大小的數(shù)組,而我們就將這個未知大小的數(shù)組稱為柔性數(shù)組,并將這個數(shù)組成員稱為柔性數(shù)組成員:

typedef struct A
{
	int a;
	int arr1[0];
	//柔性數(shù)組成員
}A;

typedef struct B
{
	int b;
	int arr2[];
	//柔性數(shù)組成員
}B;
? 1.柔性數(shù)組的特點(diǎn):

? 根據(jù)上面我們說到的柔性數(shù)組定義,我們可以得知,柔性數(shù)組主要有以下 3 個特點(diǎn):

①. 結(jié)構(gòu)中的柔性數(shù)組成員前面必須至少存在一個其他成員。

②. sizeof 返回的這種結(jié)構(gòu)大小不包括柔性數(shù)組的內(nèi)存。

③. 包含柔性數(shù)組成員的結(jié)構(gòu)用 malloc () 函數(shù)進(jìn)行內(nèi)存的動態(tài)分配,并且分配的內(nèi)存應(yīng)該大于結(jié)構(gòu)的大小,以適應(yīng)柔性數(shù)組的預(yù)期大小。

? 定義中我們可以得知,柔性數(shù)組只能作為結(jié)構(gòu)的最后一個元素,并且柔性數(shù)組的大小是不確定的,因此在結(jié)構(gòu)中,柔性數(shù)組之前至少要有一個其它成員的存在。

? 因為柔性數(shù)組的大小是未知的,因此在計算結(jié)構(gòu)大小時,將不會計入柔性數(shù)組的大?。?/p>

typedef struct test
{
	int i;
	int arr[];
}test;

int main()
{
	test a;
	printf("The size of a is :%d\n", sizeof(a));

	return 0;
}

? 例如上述代碼的編譯運(yùn)行結(jié)果顯示,類型 a 的大小為 4 個字節(jié),即只包含成員整形變量 i:

? 因為柔性數(shù)組的大小是未知的,因此其大小是動態(tài)、可變的,故在給其分配空間時,應(yīng)當(dāng)使用 malloc 函數(shù)進(jìn)行動態(tài)內(nèi)存分配。同時因為計算結(jié)構(gòu)大小時沒有計入柔性數(shù)組的大小,因此分配的內(nèi)存大小應(yīng)當(dāng)大于結(jié)構(gòu)的大小,才能容納下柔性數(shù)組的預(yù)期大?。?/p>

typedef struct test
{
	int i;
	int arr[];
}test;

int main()
{
	test a;
	//定義test類型結(jié)構(gòu)體a

	test* p = (test*)malloc(sizeof(test) + 40);
	//結(jié)構(gòu)的大小為sizeof(test)的大小,故開辟的動態(tài)內(nèi)存大小應(yīng)當(dāng)大于該值

	free(p);
	p = NULL;

	return 0;
}
? 2.柔性數(shù)組的使用:

? 有了上節(jié)課動態(tài)內(nèi)存管理函數(shù)的學(xué)習(xí),再來研究柔性數(shù)組的使用就十分簡單了,我們直接來看示例:

typedef struct test
{
	int i;
	int arr[];
}test;

int main()
{
	test a;
	//定義test類型結(jié)構(gòu)體a

	test* p = (test*)malloc(sizeof(test) + 40);
	//malloc函數(shù)的返回值為指針類型,故使用結(jié)構(gòu)體指針test*
	//使用malloc函數(shù)動態(tài)分配空間:test類型結(jié)構(gòu)體的大小(不包含柔性數(shù)組) + 40字節(jié)
	if (p == NULL)
	{
		perror("malloc");
		//判斷動態(tài)內(nèi)存空間是否開辟成功
		return 1;
	}

	//業(yè)務(wù)處理1:
	p->i = 10;
	int i = 0;
	//給柔性數(shù)組元素賦值:
	for (i = 0; i< p->i; i++)
	{
		p->arr[i] = i;
	}
	//打印柔性數(shù)組元素:
	for(i=0;ii;i++)
	{
		printf("%d ", p->arr[i]);
	}
	printf("\n");

	test* pp = (test*)realloc(p, sizeof(test) + 80);
	//使用realloc函數(shù)將結(jié)構(gòu)指針指向的結(jié)構(gòu)a進(jìn)行擴(kuò)容
	if (pp == NULL)
	{
		perror("realloc");
		//判斷動態(tài)內(nèi)存空間是否擴(kuò)容成功
		return 1;
	}

	//業(yè)務(wù)處理2:
	pp->i = 20;
	for (i = 0; i< pp->i; i++)
	{
		pp->arr[i] = i + 9;
	}
	for (i = 0; i< pp->i; i++)
	{
		printf("%d ", pp->arr[i]);
	}
	printf("\n");

	free(pp);
	pp = NULL;

	return 0;
}

? 在這個示例中,我們首先定義了 test 類型結(jié)構(gòu)體 a,接著使用了 malloc 函數(shù)為結(jié)構(gòu)體 a 與柔性數(shù)組分配了動態(tài)存儲空間;接著在判斷非空(動態(tài)內(nèi)存空間分配成功)后給結(jié)構(gòu)體成員 i 與柔性數(shù)組 arr 內(nèi)元素賦值,并進(jìn)行了打印;再接下來,我們通過使用 realloc 函數(shù)將包含柔性數(shù)組 arr 的結(jié)構(gòu)體 a 擴(kuò)容,并在擴(kuò)容后給結(jié)構(gòu)體內(nèi)各成員重新賦值并打??;最后釋放使用完畢的動態(tài)內(nèi)存空間并將指針置空:

? 3.柔性數(shù)組的優(yōu)勢:

? 但是同時我們又發(fā)現(xiàn),我們使用柔性數(shù)組的目的在于希望使結(jié)構(gòu)成員的空間變?yōu)閯討B(tài),可大可小,那么為什么我們不將其寫成指針,由指針成員來指向其它的空間呢?如下:

typedef struct test
{
	int i;
	int* p;
}test;

int main()
{
	test* ptr = (test*)malloc(sizeof(test));
	if (ptr == NULL)
	{
		perror("malloc");
		return 1;
	}
	ptr->p = (int*)malloc(40);
	if (ptr->p == NULL)
	{
		free(ptr);
		ptr = NULL;
		return 1;
	}

	return 0;
}

? 我們說,這兩種方法都可以達(dá)到我們的要求,實現(xiàn)我們的目的,完成同樣的功能。但是使用柔性數(shù)組有兩個顯著的好處:

★ 方便內(nèi)存釋放。

★?有利于提升訪問速度。

★ 有利于減少內(nèi)存碎片。

? 使用柔性數(shù)組的第一個好處是方便于內(nèi)存釋放。我們可以想象一下,假如是在我們的程序之中,用戶在完成結(jié)構(gòu)體調(diào)用后,可以調(diào)用 free 函數(shù)將結(jié)構(gòu)體空間進(jìn)行釋放,那么這個時候,下面這種方法進(jìn)行了二次空間分配,即使用指針指向了另一塊動態(tài)內(nèi)存空間,我們不能依賴于用戶去發(fā)現(xiàn)還有另外一塊動態(tài)內(nèi)存空間需要及時進(jìn)行釋放,一旦用戶沒有注意,就有可能會造成內(nèi)存釋放不及時,嚴(yán)重時甚至有可能會導(dǎo)致內(nèi)存泄漏問題的產(chǎn)生。反觀使用柔性數(shù)組,只需調(diào)用一次 free 函數(shù)即可完成內(nèi)存空間的釋放。

? 使用柔性數(shù)組的第二個優(yōu)勢在于,可以在一定程度上提升我們的內(nèi)存訪問速度。上面這種方式在進(jìn)行內(nèi)存訪問時,由于使用了二次空間分配,則在訪問時的尋址過程中就需要花費(fèi)更多的時間,而如果我們使用了柔性數(shù)組,由于開辟的空間是連續(xù)的,在尋址時便可以節(jié)省一定的時間。

? 最后一個優(yōu)點(diǎn)是,有利于減少內(nèi)存碎片。這個很好理解,使用二次內(nèi)存分配的方式所申請到的空間是不連續(xù)的,就會在內(nèi)存中產(chǎn)生更多的空隙,就會導(dǎo)致內(nèi)存空間中產(chǎn)生更多的內(nèi)存碎片,而使用柔性數(shù)組所申請的空間是連續(xù)的,則作為一個個整體,就可以減少內(nèi)存碎片的產(chǎn)生了。

🍒總結(jié)🍒:

加上今天內(nèi)容的學(xué)習(xí),我們就可以將動態(tài)內(nèi)存空間靈活的運(yùn)用在我們的程序代碼之中了。并且通過使用并管理動態(tài)內(nèi)存空間,還可以提高我們代碼及程序的靈活性和執(zhí)行效率,有助于我們寫出更加優(yōu)秀的程序。所以,掌握好動態(tài)內(nèi)存的管理與柔性數(shù)組的使用,對于我們的工作中的許多項目都大有裨益,希望各位小伙伴們下去以后能夠多加練習(xí),切實掌握動態(tài)內(nèi)存管理與柔性數(shù)組的相關(guān)知識。

🔥🔥有的路,你必須一個人走,這是選擇而非孤獨(dú)🔥🔥

更新不易,辛苦各位小伙伴們動動小手,👍三連走一走💕💕 ~ ~ ~? 你們真的對我很重要!最后,本文仍有許多不足之處,歡迎各位認(rèn)真讀完文章的小伙伴們隨時私信交流、批評指正!

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

本文名稱:【C語言進(jìn)階】動態(tài)內(nèi)存不知道怎么用?當(dāng)然是結(jié)合柔性數(shù)組一起用-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://vcdvsql.cn/article12/dioedc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)ChatGPT、網(wǎng)站內(nèi)鏈、網(wǎng)站營銷、標(biāo)簽優(yōu)化、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司