最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文掌握C語(yǔ)言中的柔性數(shù)組

 更新時(shí)間:2024年03月27日 11:40:34   投稿:mrr  
柔性數(shù)組在C語(yǔ)言的?C99?標(biāo)準(zhǔn)中,引入的新特性,結(jié)構(gòu)中的最后一個(gè)元素的大小允許是未知的數(shù)組,即為柔性數(shù)組,本文給大家介紹c語(yǔ)言中的柔性數(shù)組,感興趣的朋友跟隨小編一起看看吧

何為柔性數(shù)組(Flexible Array)

柔性數(shù)組在C語(yǔ)言的 C99 標(biāo)準(zhǔn)中,引入的新特性。結(jié)構(gòu)中的最后一個(gè)元素的大小允許是未知的數(shù)組,即為柔性數(shù)組。

struct S {
	int i;
	int arr[];   //柔性數(shù)組成員
	/*int arr[0];*/ //這兩種寫法都可以,具體看編譯器
};

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

  • 柔性數(shù)組不能單獨(dú)的出現(xiàn)在結(jié)構(gòu)體之中,至少要包含一個(gè)及以上其它成員,且要在末尾
  • 利用sizeof計(jì)算的結(jié)構(gòu)體大小,并不會(huì)去計(jì)算柔性數(shù)組的大小
  • 包含柔性數(shù)組成員的結(jié)構(gòu)體要利用malloc來(lái)進(jìn)行動(dòng)態(tài)內(nèi)存分配,且分配的內(nèi)存大小要大于結(jié)構(gòu)體內(nèi)存大小,來(lái)達(dá)到預(yù)期的所需內(nèi)存的大小。

2.柔性數(shù)組的創(chuàng)建和簡(jiǎn)單使用

創(chuàng)建

struct S {
	int i;
	int arr[];  
};
int main() {
	struct S *s = (struct S*)malloc(sizeof(struct S)+5*sizeof(int));
//使用malloc創(chuàng)建了一個(gè)大小為:       (結(jié)構(gòu)體本身大?。?+ 柔性數(shù)組你所期望的大小
    struct S *s = (struct S*)malloc(sizeof(struct S)+10*sizeof(int));
                                                 //調(diào)整柔性數(shù)組大小
	return 0;
}

這就是為什么柔性數(shù)組為什么要在成員末尾的原因,只有它在末尾,開辟內(nèi)存的大小變化時(shí),柔性數(shù)組的大小才會(huì)隨著變化,這就是所謂的柔性數(shù)組

 簡(jiǎn)單使用

                                                                   代碼一

struct S {
	int i;
	int arr[];  
};
int main() {
	struct S *p = (struct S*)malloc(sizeof(struct S)+5*sizeof(int));
    if(p == NULL)
    return 1;
	//業(yè)務(wù)處理
	p->i = 100;
	for (int i = 0; i < 100; i++)
	{
		p->arr[i] = i;
	}
	//釋放空間
	free(p);
	p = NULL;
	return 0;
}

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

在上柔性數(shù)組的簡(jiǎn)單使用中,我們的代碼換種寫法也可以達(dá)到跟柔性數(shù)組一樣的功能

把柔性數(shù)組成員換成:指針變量

                                                                  代碼二

struct S {
	int i;
	int *parr;
};
int main() {
	struct S* p = (struct S*)malloc(sizeof(struct S));
	if (p == NULL)
		return 0;
	p->parr = (int*)malloc(5 * sizeof(int));//多一次malloc就必然要多一次檢查和內(nèi)存釋放
	if (p->parr == NULL)                         
		return 0;
	//業(yè)務(wù)處理
	p->i = 100;
	for (int i = 0; i < 100; i++)
	{
		p->parr = i;
	}
	//釋放空間
	free(p->parr);  //得先釋放結(jié)構(gòu)體成員parr所指向的空間
	p->parr = NULL;
	free(p);        //在釋放p,若順序弄錯(cuò)造成內(nèi)存泄露
	p->parr = NULL;
	return 0;
}

說(shuō)白了就是利用結(jié)構(gòu)體里的指針paar再去開辟一塊動(dòng)態(tài)內(nèi)存空間 

代碼一比代碼二優(yōu)勢(shì)的地方在于:

優(yōu)勢(shì) 1 :方便內(nèi)存釋放

使用了較少次的malloc,這樣使后面的內(nèi)存釋放得到了方便,且也不容易造成內(nèi)存泄漏

優(yōu)勢(shì) 2 :提升性能

連續(xù)的內(nèi)存有益于提?訪問(wèn)速度,也有益于減少內(nèi)存碎?。

到此這篇關(guān)于c語(yǔ)言中的柔性數(shù)組的文章就介紹到這了,更多相關(guān)c語(yǔ)言柔性數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • QT移植到RK3568開發(fā)板的方法步驟

    QT移植到RK3568開發(fā)板的方法步驟

    本文主要介紹了QT移植到RK3568開發(fā)板的方法步驟,文中通過(guò)圖文示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • C++中std::thread{}和std::thread()用法

    C++中std::thread{}和std::thread()用法

    std::thread{}和std::thread()在C++中都可以用于創(chuàng)建線程對(duì)象,但std::thread{}作為C++11引入的統(tǒng)一初始化,更推薦使用,因?yàn)樗踩?、更易讀,且避免了隱式類型轉(zhuǎn)換
    2024-11-11
  • C++中引用處理的基本方法

    C++中引用處理的基本方法

    引用不是新定義了一個(gè)變量,而是給已經(jīng)存在的變量取了一個(gè)別名,編譯器不會(huì)為引用變量開辟內(nèi)存空間,他和他引用的變量共用一塊內(nèi)存空間,下面這篇文章主要給大家介紹了關(guān)于C++中引用處理的基本方法,需要的朋友可以參考下
    2022-12-12
  • C++代碼實(shí)現(xiàn)逆波蘭式

    C++代碼實(shí)現(xiàn)逆波蘭式

    這篇文章主要為大家詳細(xì)介紹了C++代碼實(shí)現(xiàn)逆波蘭式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 一文詳解matlab實(shí)現(xiàn)形態(tài)學(xué)圖像處理

    一文詳解matlab實(shí)現(xiàn)形態(tài)學(xué)圖像處理

    這篇文章主要為大家介紹了matlab實(shí)現(xiàn)形態(tài)學(xué)圖像處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • C++程序的執(zhí)行順序結(jié)構(gòu)以及關(guān)系和邏輯運(yùn)算符講解

    C++程序的執(zhí)行順序結(jié)構(gòu)以及關(guān)系和邏輯運(yùn)算符講解

    這篇文章主要介紹了C++程序的執(zhí)行順序結(jié)構(gòu)以及關(guān)系和邏輯運(yùn)算符講解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C++ 將文件數(shù)據(jù)一次性加載進(jìn)內(nèi)存實(shí)例代碼

    C++ 將文件數(shù)據(jù)一次性加載進(jìn)內(nèi)存實(shí)例代碼

    這篇文章主要介紹了C++ 將文件數(shù)據(jù)一次性加載進(jìn)內(nèi)存實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C語(yǔ)言值傳遞和地址傳遞詳解

    C語(yǔ)言值傳遞和地址傳遞詳解

    大家好,本篇文章主要講的是C語(yǔ)言值傳遞和地址傳遞詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Cocos2d-x UI開發(fā)之CCControlSwitch控件類使用實(shí)例

    Cocos2d-x UI開發(fā)之CCControlSwitch控件類使用實(shí)例

    這篇文章主要介紹了Cocos2d-x UI開發(fā)之CCControlSwitch控件類使用實(shí)例,本文代碼中含大量注釋講解了CCControlSwitch控件類的使用,需要的朋友可以參考下
    2014-09-09
  • C語(yǔ)言的動(dòng)態(tài)內(nèi)存管理你了解嗎

    C語(yǔ)言的動(dòng)態(tài)內(nèi)存管理你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的動(dòng)態(tài)內(nèi)存管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03

最新評(píng)論

万山特区| 长沙市| 勐海县| 闻喜县| 股票| 缙云县| 东丰县| 林口县| 淅川县| 岚皋县| 华池县| 东明县| 兴城市| 乐业县| 唐山市| 漯河市| 武隆县| 木兰县| 会泽县| 富民县| 南江县| 墨玉县| 突泉县| 依兰县| 鄂伦春自治旗| 汾西县| 上犹县| 芦溪县| 长沙市| 东乌珠穆沁旗| 长葛市| 咸宁市| 颍上县| 湘乡市| 湘西| 馆陶县| 大英县| 宜章县| 仁寿县| 岳西县| 阳高县|