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

C語(yǔ)言編程C++柔性數(shù)組結(jié)構(gòu)示例講解

 更新時(shí)間:2021年09月28日 09:00:59   作者:小碼農(nóng)UU  
這篇文章主要介紹了C語(yǔ)言編程系列中的柔性數(shù)組,文中含有詳細(xì)的示例代碼講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助

繞指柔—柔性數(shù)組

也許你從來(lái)沒(méi)有聽說(shuō)過(guò)柔性數(shù)組(flexible array)這個(gè)概念,但是它確實(shí)是存在的。 C99 中,結(jié)構(gòu)體中的最后一個(gè)元素允許是未知大小的數(shù)組,這就叫做柔性數(shù)組成員。

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

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

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

image-20210922062118298

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

image-20210922063451309

那我們?nèi)绾问褂媚?/p>

image-20210925215752477

法一

#include<stdio.h>
#include<stdlib.h>
struct S
{
	int a;
	int arr[];//未知大小 柔性數(shù)組成員  數(shù)組的大小是可以調(diào)整的
};
int main()
{
	//我們?cè)趺撮_辟呢
	//包含柔性數(shù)組成員的結(jié)構(gòu)體的使用,要配合malloc這樣的動(dòng)態(tài)內(nèi)存分配內(nèi)存函數(shù)使用
	struct S* ps = (struct S*)malloc(sizeof(struct S) + 5 * sizeof(int));
	//我們?nèi)绾问褂媚?
	ps->a = 100;
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		ps->arr[i] = i;
	}
	//還想擴(kuò)大呢
	struct S* ptr = (struct S*)realloc(ps, sizeof(struct S) + 10 * sizeof(int));//先交給ptr,防止內(nèi)存調(diào)整失敗
	if (ptr == NULL)//判斷是否開辟成功
	{
		printf("擴(kuò)容失敗\n");
		return 0;
	}
	else
	{
		ps = ptr;
		for (int i = 5; i < 10; i++)
		{
			ps->arr[i] = i;
		}
		for (int i = 0; i < 10; i++)
		{
			printf("%d ", ps->arr[i] = i);
		}
		//用完就釋放
		free(ps);
		ps = NULL;
	}	
	return 0;
}

法二

image-20210922071448537

image-20210925223935303

#include<stdio.h>
#include<stdlib.h>
struct S
{
	int a;
	int* parr;
};
int main()
{
	//我們?cè)趺撮_辟呢
	struct S* ps = (struct S*)malloc(sizeof(struct S));
	//我們?nèi)绾问褂媚?
	ps->a = 100;
	ps->parr = (int*)malloc(5 * sizeof(int));
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		ps->parr[i] = i;
	}
	//還想擴(kuò)大呢
	int* ptr = (int*)malloc(10 * sizeof(int));//先交給ptr,防止內(nèi)存調(diào)整失敗
	if (ptr == NULL)//判斷是否開辟成功
	{
		printf("擴(kuò)容失敗\n");
		return 0;
	}
	else
	{
		ps->parr = ptr;
		for (int i = 5; i < 10; i++)
		{
			ps->parr[i] = i;
		}
		for (int i = 0; i < 10; i++)
		{
			printf("%d ", ps->parr[i] = i);
		}
		//用完就釋放
		free(ps->parr);
		ps->parr = NULL;
		free(ps);
		ps = NULL;
	}	
	return 0;
}

那上面那個(gè)方法好一點(diǎn)呢

第一個(gè)好處是:方便內(nèi)存釋放

如果我們的代碼是在一個(gè)給別人用的函數(shù)中,你在里面做了二次內(nèi)存分配,并把整個(gè)結(jié)構(gòu)體返回給用戶。用戶調(diào)用free可以釋放結(jié)構(gòu)體,但是用戶并不知道這個(gè)結(jié)構(gòu)體內(nèi)的成員也需要free,所以你不能指望用戶來(lái)發(fā)現(xiàn)這個(gè)事。所以,如果我們把結(jié)構(gòu)體的內(nèi)存以及其成員要的內(nèi)存一次性分配好了,并返回給用戶一個(gè)結(jié)構(gòu)體指針,用戶做一次free就可以把所有的內(nèi)存也給釋放掉。

第二個(gè)好處是:這樣有利于訪問(wèn)速度

連續(xù)的內(nèi)存有益于提高訪問(wèn)速度,也有益于減少內(nèi)存碎片。(其實(shí),我個(gè)人覺(jué)得也沒(méi)多高了,反正你跑不了要用做偏移量的加法來(lái)尋址)

總結(jié)

第一種好,不好的話,要柔性數(shù)組干嗎?是不是
何意百煉剛,化為繞指柔

首先說(shuō)明一下我不軟弱,只是單純覺(jué)得這句詩(shī)好玩,我不認(rèn)為這首詩(shī)是軟弱的詩(shī)我有自己的見解。說(shuō)軟弱的只能說(shuō)不要你想的就是你想的。

以上就是C語(yǔ)言編程之柔性數(shù)組示例講解的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言柔性數(shù)組的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文掌握C++?中使用變量從定義到實(shí)踐

    一文掌握C++?中使用變量從定義到實(shí)踐

    變量是用于存儲(chǔ)數(shù)據(jù)值的容器,在?C++?中,有不同類型的變量(使用不同的關(guān)鍵字定義),這篇文章給大家介紹C++?中使用變量從定義到實(shí)踐記錄,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • C語(yǔ)言中結(jié)構(gòu)體(struct)的幾種初始化方法

    C語(yǔ)言中結(jié)構(gòu)體(struct)的幾種初始化方法

    相信大家都知道struct結(jié)構(gòu)體是C語(yǔ)言中非常重要的復(fù)合類型,初始化的方法很多,那么小編下面對(duì)這些方法進(jìn)行總結(jié),便于自己和大家以后查閱,有需要的可以參考借鑒。
    2016-08-08
  • C/C++ Qt 基本文件讀寫的基本使用(2種實(shí)現(xiàn))

    C/C++ Qt 基本文件讀寫的基本使用(2種實(shí)現(xiàn))

    文件的讀寫是很多應(yīng)用程序具有的功能,本文主要介紹了兩種實(shí)現(xiàn)方法,第一種使用QFile類的IODevice讀寫功能直接讀寫,第二種是利用 QFile和QTextStream結(jié)合起來(lái),用流的方式進(jìn)行文件讀寫
    2021-11-11
  • C語(yǔ)言實(shí)現(xiàn)散列表(哈希Hash表)實(shí)例詳解

    C語(yǔ)言實(shí)現(xiàn)散列表(哈希Hash表)實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)散列表(哈希Hash表)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++之拼接長(zhǎng)字符串問(wèn)題

    C++之拼接長(zhǎng)字符串問(wèn)題

    這篇文章主要介紹了C++之拼接長(zhǎng)字符串問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • OpenCV圖像處理基本操作詳解

    OpenCV圖像處理基本操作詳解

    這篇文章主要為大家詳細(xì)介紹了OpenCV圖像處理基本操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • C語(yǔ)言二叉樹的概念結(jié)構(gòu)詳解

    C語(yǔ)言二叉樹的概念結(jié)構(gòu)詳解

    二叉樹可以簡(jiǎn)單理解為對(duì)于一個(gè)節(jié)點(diǎn)來(lái)說(shuō),最多擁有一個(gè)上級(jí)節(jié)點(diǎn),同時(shí)最多具備左右兩個(gè)下級(jí)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。本文將詳細(xì)介紹一下C++中二叉樹的實(shí)現(xiàn)和遍歷,需要的可以參考一下
    2022-08-08
  • C/C++實(shí)現(xiàn)手寫數(shù)字識(shí)別的示例詳解

    C/C++實(shí)現(xiàn)手寫數(shù)字識(shí)別的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用C/C++實(shí)現(xiàn)手寫數(shù)字識(shí)別,分別處理 32*32 文本數(shù)據(jù)集和mnist 28*28 png數(shù)據(jù)集,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-10-10
  • C++模版函數(shù)詳解

    C++模版函數(shù)詳解

    C++中的模版總體可以分為兩大類:模版函數(shù)、模版類。本篇文章先寫模版函數(shù),需要的朋友可以參考下
    2017-02-02
  • 使用OpenCV實(shí)現(xiàn)檢測(cè)和追蹤車輛

    使用OpenCV實(shí)現(xiàn)檢測(cè)和追蹤車輛

    這篇文章主要為大家詳細(xì)介紹了使用OpenCV實(shí)現(xiàn)檢測(cè)和追蹤車輛,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評(píng)論

仪征市| 莱阳市| 东乡县| 峡江县| 吕梁市| 麻阳| 蓝山县| 木兰县| 百色市| 扬州市| 平远县| 吴忠市| 东宁县| 腾冲县| 高邑县| 唐河县| 正安县| 航空| 芮城县| 桃江县| 巴中市| 奎屯市| 定襄县| 尼勒克县| 垦利县| 精河县| 瓮安县| 钦州市| 正阳县| 铜陵市| 彭水| 运城市| 东丽区| 香格里拉县| 嘉义市| 乐业县| 哈密市| 正蓝旗| 都匀市| 体育| 清新县|