欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

創(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)建了一個大小為:       (結(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ù)組

 簡單使用

                                                                   代碼一

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ù)組的簡單使用中,我們的代碼換種寫法也可以達(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,若順序弄錯造成內(nèi)存泄露
	p->parr = NULL;
	return 0;
}

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

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

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

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

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

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

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

相關(guān)文章

  • C/C++實現(xiàn)全排列算法的示例代碼

    C/C++實現(xiàn)全排列算法的示例代碼

    本文主要介紹了C/C++實現(xiàn)全排列算法的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • C++如何實現(xiàn)DNS域名解析

    C++如何實現(xiàn)DNS域名解析

    這片文章介紹了C++如何實現(xiàn)DNS域名解析,還有對相關(guān)技術(shù)的介紹,代碼很詳細(xì),需要的朋友可以參考下
    2015-07-07
  • C++學(xué)習(xí)進階篇之類大小計算和this指針

    C++學(xué)習(xí)進階篇之類大小計算和this指針

    this是C++中的一個關(guān)鍵字,也是一個const指針,它指向當(dāng)前對象,通過它可以訪問當(dāng)前對象的所有成員,下面這篇文章主要給大家介紹了關(guān)于C++學(xué)習(xí)進階篇之類大小計算和this指針的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • C++利用用埃式篩法求解素數(shù)

    C++利用用埃式篩法求解素數(shù)

    埃拉托斯特尼篩法,簡稱埃氏篩或愛氏篩,是一種由希臘數(shù)學(xué)家埃拉托斯特尼所提出的一種簡單檢定素數(shù)的算法。本文將利用這一算法實現(xiàn)求解素數(shù),感興趣的可以了解一下
    2023-01-01
  • 解決Visual?Studio?Code錯誤Cannot?build?and?debug?because?the

    解決Visual?Studio?Code錯誤Cannot?build?and?debug?because?

    這篇文章主要為大家介紹了解決Visual?Studio?Code錯誤Cannot?build?and?debug?because?the及分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • C++基于Boost庫實現(xiàn)命令行解析

    C++基于Boost庫實現(xiàn)命令行解析

    Boost庫中默認(rèn)自帶了一個功能強大的命令行參數(shù)解析器,以往我都是自己實現(xiàn)參數(shù)解析的,今天偶爾發(fā)現(xiàn)這個好東西,就來總結(jié)一下參數(shù)解析的基本用法,該庫需要引入program_options.hpp頭文件,即可使用了
    2021-06-06
  • C++設(shè)計模式編程中proxy代理模式的使用實例

    C++設(shè)計模式編程中proxy代理模式的使用實例

    這篇文章主要介紹了C++設(shè)計模式編程中proxy代理模式的使用實例解析,代理模式可以被歸類為結(jié)構(gòu)型的設(shè)計模式,代理模式主張為對象提供一種代理以控制對這個對象的訪問,需要的朋友可以參考下
    2016-03-03
  • C/C++動態(tài)分配與釋放內(nèi)存的區(qū)別詳細(xì)解析

    C/C++動態(tài)分配與釋放內(nèi)存的區(qū)別詳細(xì)解析

    以下是對C與C++中動態(tài)分配與釋放內(nèi)存的區(qū)別進行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • 實例代碼分析c++動態(tài)分配

    實例代碼分析c++動態(tài)分配

    這篇文章主要介紹了c++動態(tài)分配的的相關(guān)資料,文中代碼簡單易懂,方便大家更好的學(xué)習(xí)參考,感興趣的朋友可以了解下
    2020-06-06
  • C++模板二段名字查找方法

    C++模板二段名字查找方法

    下面小編就為大家?guī)硪黄狢++模板二段名字查找方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論