在struct初始化时静态初始化struct内部的数组

ome*_*sbk 0 c memory arrays struct

我试图通过使用静态分配的数组来构建一个环形缓冲区(要求,已经建立了dinamical,后来决定去静态).但是,我希望有一个通用的环形缓冲区结构,可以在其中实例化不同大小的数组.我有这个结构:

typedef struct measurementsRingBuffer
{   
    int maxSize;
    int currentSize;
    double measurementsArray[MEAS_ARRAY_CAPACITY];
} measurementsRingBuffer;
Run Code Online (Sandbox Code Playgroud)

我通过以下方式实例化结构:

measurementsRingBuffer buffer = { .maxSize = MEAS_ARRAY_CAPACITY, .currentSize = 0 };
Run Code Online (Sandbox Code Playgroud)

有没有什么办法可以在结构实例化时定义数组大小,而不是在结构本身中定义它?我听起来不太可能,但我会试一试.

250*_*501 5

您可以使用指向数组的指针:

typedef struct measurementsRingBuffer
{   
    int maxSize;
    int currentSize;
    double* measurementsArray ;
} measurementsRingBuffer;

double small_array[10];
measurementsRingBuffer small = { .maxSize = 10 , .measurementsArray = small_array } ;
Run Code Online (Sandbox Code Playgroud)

甚至是复合文字:

measurementsRingBuffer small = { .maxSize = 10 , .measurementsArray = ( double[10] ){ 0 } } ;
Run Code Online (Sandbox Code Playgroud)

请注意,if复合文字是在函数体外定义的,它具有静态存储持续时间.