什么是柔性數(shù)組
什么是柔性數(shù)組?柔性數(shù)組其實也是動態(tài)內(nèi)存管理部分的內(nèi)容。這節(jié)主要來復(fù)習(xí)柔性數(shù)組的知識點。?
當(dāng)結(jié)構(gòu)體的最后一個成員為數(shù)組, 且這個數(shù)組的大小未確定時, 我們就稱它是柔性數(shù)組。
如:
struct stu
{
? ? ? ? char name[20];
? ? ? ? int age;
? ? ? ? char adress[];
}
這里的adress就是一個柔性數(shù)組。 (寫成char adress[0] 可能報錯)
柔性數(shù)組的特點?
特點1. 柔性數(shù)組成員之前必須有一個其他成員。?
特點2. 進(jìn)行結(jié)構(gòu)體大小計算時不包含柔性數(shù)組成員的大小。如:
?
struct a
{
? ? ? ? int i;
? ? ? ? int a[];
}
?結(jié)構(gòu)體a的大小是4,沒有計算a的大小。?
柔性數(shù)組的使用
typedef struct a
{
? ? ? ? int i;
? ? ? ? int price[];
}type_a;
int main()
{
? ? ? ? type_a* tmp = (type_a*)malloc(sizeof(type_a) + sizeof(int) * 10); //這里的第一個sizeof是計算? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//的第一個成員i的大小,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//+后面的計算的是為prince? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//這個柔性數(shù)組開辟的空間
? ? ? ? for(int j?= 0; j?< tmp->i;? j++)
????????{
? ? ? ? ? ? ? ? tmp->price[ j ] = j;? ? ? ??
????????}
? ? ? ? free(tmp);
????????return 0;
}
柔性數(shù)組使用的好處
好處1.
通過上面的使用我們可以發(fā)現(xiàn), 我們使用柔性數(shù)組時,是定義一個結(jié)構(gòu)體指針, 然后通過動態(tài)內(nèi)存分配直接申請一塊大的內(nèi)存。 這些內(nèi)存顯然是連續(xù)的。 而柔性數(shù)組的大小也隨著分配確定了下來一起成為一個確定的結(jié)構(gòu)體。 而后續(xù)當(dāng)我們完成使用后, 想要釋放空間時, 我們只需要通過那個結(jié)構(gòu)體指針來釋放掉這塊空間就好。?
但是如果我們不使用柔性數(shù)組, 而是把柔性數(shù)組改成一個指針呢。我們會怎么做, 為了達(dá)成上面的效果, 我們會通過動態(tài)內(nèi)存分配申請一大塊內(nèi)存, 將這塊內(nèi)存給給這個指針。 但是, 這里就有了一個問題,那就是這個指針?biāo)赶虻膬?nèi)存空間和結(jié)構(gòu)體的內(nèi)存空間不是連續(xù)的(隨即開辟, 有可能連續(xù), 但是幾率太?。_@樣的話, 假如我們通過結(jié)構(gòu)體指針釋放結(jié)構(gòu)體內(nèi)存時, 那個我們?yōu)榻Y(jié)構(gòu)體的成員指針開辟的空間就泄露了。 出現(xiàn)問題。 這就是二次分配問題需要注意的地方。 我們要先釋放成員指針指向的內(nèi)存空間。 再釋放結(jié)構(gòu)體內(nèi)存空間。?
用戶使用的時候有時候是不知道具體的代碼是怎么實現(xiàn)的。 所以柔性數(shù)組可以很好的規(guī)避二次分配出現(xiàn)的問題。文章來源:http://www.zghlxwxcb.cn/news/detail-836099.html
好處2.使用柔性數(shù)組因為空間是連續(xù)的, 所以能加快程序運行速度。文章來源地址http://www.zghlxwxcb.cn/news/detail-836099.html
到了這里,關(guān)于柔性數(shù)組知識點的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!