摘要:柔性數(shù)組筆記自取柔性數(shù)組筆記歡迎喜歡學(xué)習(xí)的朋友互關(guān)一起努力博主目前在學(xué)習(xí)語言轉(zhuǎn)碼道路艱險,需要你們的支持文章目錄柔性數(shù)組什么是柔性數(shù)組柔性數(shù)組成員的創(chuàng)建柔性數(shù)組成員特點兩種方式創(chuàng)建柔性數(shù)組成員什么是柔性數(shù)組中,結(jié)構(gòu)
??筆記自取~ :柔性數(shù)組筆記??
??歡迎喜歡學(xué)習(xí)
C/C++
的朋友互關(guān)一起努力??!
博主目前在學(xué)習(xí)C語言!!轉(zhuǎn)碼道路艱險,需要你們的支持!??
?C99 中,結(jié)構(gòu)體中的
最后一個元素允許是未知大小的數(shù)組
,這就叫做『柔性數(shù)組』成員? 柔性數(shù)組成員
前必須至少有一個成員
直接用一段代碼感受吧?
struct stu{ int a; int b[];//柔性數(shù)組成員};struct stu{ int a; int b[0];//柔性數(shù)組成員 //這里b[0]并不是指數(shù)組元素為0,而是數(shù)組元素不確定}
所以柔性數(shù)組又稱0長度數(shù)組
以上兩種寫法都可以,需要根據(jù)編譯器支持的類型去判斷
??柔性數(shù)組成員應(yīng)該注意以下特點:
不包括柔性數(shù)組成員
的大小我們給柔性數(shù)組成員分配一下動態(tài)內(nèi)存空間
看看
首先數(shù)數(shù)組外形的
?優(yōu)點:方便釋放,
mallco次數(shù)少
,不容易出現(xiàn)內(nèi)存泄漏
struct stu{ int a; int b[];//柔性數(shù)組成員};int main(){ struct stu* st = (struct stu*)malloc(sizeof(struct stu) + 4 * sizeof(int)); //這樣就完成了柔性數(shù)組內(nèi)容的分配 //現(xiàn)在的int b[]相當(dāng)于 int b[4] if(st == NULL) { return -1; } else { st->a = 0; int i = 0; for(i = 0; i < 4; i++) { st->b[i] = i; } } //空間不夠大,繼續(xù)申請開辟空間 struct stu* s = (struct stu*)realloc(st, sizeof(struct stu) + 8 * sizeof(int)); free(st); st = NULL; if(s == NULL) { return -1; } else { int i = 0; for(i = 0; i < 8; i++)//b[]相當(dāng)于一個b[8] { s->b[i] = i; } } printf("%d", s->b[7]);//打印出來是7 free(s); s = NULL;//結(jié)束釋放內(nèi)存 return 0; }
??看看指針類型的柔性數(shù)組成員是如何開辟的
疑問:最后一個元素不是數(shù)組嗎?為什么是指針?
看下面代碼的注釋,你就知道了
??優(yōu)點:
訪問速度快
??缺點:melloc過度,會導(dǎo)致
內(nèi)存碎片
過多,降低空間利用率
struct stu{ int a; int* b;//柔性數(shù)組成員,指向一個整型的地址,目前還不能算數(shù)組};int main(){ struct stu* st = (struct stu*)malloc(sizeof(struct stu)); //先給a分配好地址 if (st == NULL) { return -1; } else//賦值 { st->b = (int*)malloc(4 * sizeof(struct stu)); //現(xiàn)在給b分配4個整型大小的空間 //b是空間起始位置地址,b可以看作一個數(shù)組的起始地址了,就可以當(dāng)作是數(shù)組名 if (st->b == NULL) { return -1; } else { st->a = 0; int i = 0; for (i = 0; i < 4; i++) { st->b[i] = i; } } } printf("%d/n", st->b[3]);//打印3 //空間不夠大,繼續(xù)申請開辟空間 int* s = (int*)realloc(st->b, 8 * sizeof(int)); //空間擴大 if (s == NULL) { return -1; } else { st->b = s;//這樣b又是空間起始地址,可以當(dāng)作數(shù)組進行賦值 int i = 0; for (i = 0; i < 8; i++) { st->b[i] = i; } } printf("%d/n", st->b[7]);//打印7 //空間釋放 //先釋放整個結(jié)構(gòu)體mallco的空間 free(st); st = NULL; free(s); s = NULL; return 0;}
??????中間過程額外要注意
判斷動態(tài)內(nèi)存分配所返回的指針是否為空指針
??????
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/121854.html
摘要:廣州三本大三在讀,在廣州找實習(xí)。這篇文章其實主要是記錄一下自己的面試經(jīng)歷,希望大家看完之后能有所了解進入中小公司究竟需要什么水平。時間復(fù)雜度盡量低一些使用快排的,將給出的隨機數(shù)做基準(zhǔn)值返回的坐標(biāo)就是了。 前言 只有光頭才能變強 這陣子跑去面試Java實習(xí)生啦~~~我來簡單介紹一下背景吧。 廣州三本大三在讀,在廣州找實習(xí)。大學(xué)開始接觸編程,一個非常平庸的人。 在學(xué)習(xí)編程時,跟我類似的人應(yīng)...
摘要:問題回答者黃軼,目前就職于公司擔(dān)任前端架構(gòu)師,曾就職于滴滴和百度,畢業(yè)于北京科技大學(xué)。最后附上鏈接問題我目前是一名后端工程師,工作快五年了。 showImg(https://segmentfault.com/img/bVbuaiP?w=1240&h=620); 問題回答者:黃軼,目前就職于 Zoom 公司擔(dān)任前端架構(gòu)師,曾就職于滴滴和百度,畢業(yè)于北京科技大學(xué)。 1. 前端開發(fā) 問題 大...
摘要:邊城這個名字,清蒸的理解是,和編程諧音,但似乎又不僅僅是這層含義,不知和邊城浪子這詞有沒有關(guān)系呢邊城大大來簡單的說說名字的由來唄這個名字還真跟邊城浪子有關(guān)。我認(rèn)為阮老師的教程屬于后者。 showImg(https://segmentfault.com/img/bVSv3I?w=900&h=385); 轉(zhuǎn)眼社區(qū)訪談進行了 4 期,第一期的公子,第二期的有明,第三期的依云醬,第四期的 mc...
摘要:這大概是我沒有及早使用,或多數(shù)開發(fā)者流連現(xiàn)狀造成的。它就是,一個的框架。行為驅(qū)動開發(fā)是來自測試驅(qū)動開發(fā)的開發(fā)過程。簡單的說,它就是經(jīng)常可能一天幾次將小塊代碼整合進基礎(chǔ)代碼當(dāng)中的行為。 showImg(https://segmentfault.com/img/remote/1460000013769815); 這是一篇社區(qū)協(xié)同翻譯的文章,已完成翻譯,更多信息請點擊?協(xié)同翻譯介紹?。 文章...
摘要:學(xué)習(xí)完多線程之后可以通過下面這些問題檢測自己是否掌握,下面這些問題的答案以及常見多線程知識點的總結(jié)在這里??蛇x數(shù)據(jù)結(jié)構(gòu)與算法如果你想進入大廠的話,我推薦你在學(xué)習(xí)完基礎(chǔ)或者多線程之后,就開始每天抽出一點時間來學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識點以及面試問題,已經(jīng)開源,目前已經(jīng) 35k+ Star。會一直完善下去,歡迎建議和指導(dǎo),同時也歡迎Star: https://...
閱讀 3201·2023-04-26 01:39
閱讀 3354·2023-04-25 18:09
閱讀 1623·2021-10-08 10:05
閱讀 3241·2021-09-22 15:45
閱讀 2790·2019-08-30 15:55
閱讀 2400·2019-08-30 15:54
閱讀 3173·2019-08-30 15:53
閱讀 1335·2019-08-29 12:32