柔性數組(Flexible Array)也叫伸縮性數組,其實就是變長數組,反映了C語言對精煉代碼的極緻追求。這種代碼結構産生于對動态結構體的需求。比如我們需要在結構體中存放一個動态長度的字元串,這時候,柔性數組可以大顯身手了。
C99使用不完整類型來實作柔性數組,标準形式如下:
struct MyStruct
{
int a;
double b;
char c[]; // or char c[0]; 也可以用其他資料類型;
};
c不占用MyStruct的空間,隻是作為一個符号位址存在,而且必須是結構體的最後一個成員。
#include
#include
#include
using namespace std;
typedef struct Mystruct{
int a;
double b;
char c[];
}ms, *pms;
int main(){
char c1[] = "Short string.";
char c2[] = "This is a long string.";
pms pms1 = (pms)malloc(sizeof(ms) + strlen(c1) + 1);
if(NULL != pms1){
pms1->a = 1;
pms1->b = 11;
strcpy(pms1->c, c1);
}
cout << "pms1: " << endl << pms1->a << " "
<< pms1->b << " " << pms1->c << endl;
pms pms2 = (pms)malloc(sizeof(ms) + strlen(c2) + 1);
if(NULL != pms2){
pms2->a = 2;
pms2->b = 22;
strcpy(pms2->c, c2);
}
cout << "pms2: " << endl << pms2->a << " "
<< pms2->b << " " << pms2->c << endl;
return 0;
}
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90TQONTTE90dNRUT4FEVkZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zM0kTOyUTNwITMyYDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
總結:
柔性數組的主要作用為:1.友善管理記憶體緩沖區 2. 減少記憶體碎片化