題目:
【不定項】開發c**時,經常見到如下型別的結構體定義:
typedef
struct list_tlist_t;
最後一行char data[0];的作用是?
a.方便管理記憶體緩衝區
b.減少記憶體碎片化
c.標識結構體結束
d.沒有作用
答案:ab
知識點:柔性陣列
解析:
先來看柔性陣列,引自
1、什麼是柔性陣列? 柔性陣列即陣列大小待定的陣列,c語言中結構體的最後乙個元素可以是大小未知的陣列,也就是所謂的0長度,所以我們可以用結構體來建立柔性陣列。下面來解釋答案。2、柔性陣列有什麼用途 ? 它的主要用途是為了滿足需要變長度的結構體,為了解決使用陣列時記憶體的冗餘和陣列的越界問題。由柔性陣列構造的變長結構體可以用作緩衝區、資料報等。
3、用法 :在乙個結構體的最後,申明乙個長度為空的陣列,就可以使得這個結構體是可變長的。對於編譯器來說,此時長度為0的陣列並不占用空間,因為陣列名本身不佔空間,它只是乙個偏移量, 陣列名這個符號本身代表了乙個不可修改的位址常量 (注意:陣列名永遠都不會是指標!),但對於這個陣列的大小,我們可以進行動態分配,對於編譯器而言,陣列名僅僅是乙個符號,它不會占用任何空間,它在結構體中,只是代表了乙個偏移量,代表乙個不可修改的位址常量!
對於一般結構體:
struct testtest;
為了保證結構體的陣列c足夠容納資料,需要定義乙個足夠大的空間,假設為100,這只是資料的最大量,一般情況下用到的陣列空間少於100,此時記憶體便會產生大量碎片,造成了記憶體碎片化。採用柔性陣列char c[0],為結構體構造了緩衝區,可以根據實際資料大小來動態分配記憶體,就可以減少記憶體碎片化。
刷題筆記 C C 專項練習7
題目 拷貝建構函式的特點是 a.該函式名同類名,也是一種建構函式,該函式返回自身引用 b.該函式只有乙個引數,是對某個物件的引用 c.每個類都必須有乙個拷貝初始化建構函式,如果類中沒有說明拷貝建構函式,則編譯器系統會自動生成乙個預設拷貝建構函式,作為該類的保護成員 d.拷貝初始化建構函式的作用是將乙...
刷題筆記 C C 專項練習8
題目 下面有關虛函式的描述,說法錯誤的是?a.虛函式的作用是實現了繼承性 b.虛函式的作用就是實現 動態聯編 也就是在程式的執行階段動態地選擇合適的成員函式 c.和類的靜態成員函式與非類的成員函式相比,虛函式的效率較低 d.要正確的實現虛函式,只能用乙個基類的指標或者引用來指向派生類物件 答案 a ...
C C 專項練習 五
1.在過載運算子函式時,下面 運算子必須過載為類成員函式形式 a b c d 答案 d 解析 我也是不太懂。別人的優質解析 只能使用成員函式過載的運算子有 new delete 2.c 裡面如何宣告const void f void 函式為c程式中的庫函式。a static c b extern c...