天天看點

C語言---柔性數組

柔性數組(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;
}

     
    
   
           
C語言---柔性數組

總結:

柔性數組的主要作用為:1.友善管理記憶體緩沖區 2. 減少記憶體碎片化

繼續閱讀