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