结构,数组为c中的变量

pni*_*zle 3 c arrays variables struct declare

我需要创建一个数据类型(在本例中为struct),并将数组作为属性.我有一个初始化函数,初始化此数据结构并为数组提供指定的大小.现在的问题是在结构中声明数组.例如"int values []"将要求我在括号中输入数字,例如值[256].应该在结构初始化时指定Th3 256.有没有办法解决这个问题?

typedef struct 
{
        int values[];      //error here
        int numOfValues;
} Queue;
Run Code Online (Sandbox Code Playgroud)

rai*_*mue 16

结构必须具有在编译时已知的固定大小.如果需要具有可变长度的数组,则必须动态分配内存.

typedef struct {
    int *values;
    int numOfValues;
} Queue;
Run Code Online (Sandbox Code Playgroud)

这样,您只将指针存储在结构中.在struct的初始化中,将指针指向一个用malloc分配的内存区域:

Queue q;
q.numOfValues = 256;
q.values = malloc(256 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

请记住,一旦不再使用NULL指针和free()任何动态分配的内存,请检查它的返回值.


Ano*_*non 9

#include<stdio.h> 
#include<stdlib.h>
typedef struct Queue {
int numOfValues;
int values[0]; 
} Queue_t;

int main(int argc, char **argv) {
Queue_t *queue = malloc(sizeof(Queue_t) + 256*sizeof(int));
return (1);
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以声明'可变长度数组'.您可以使用queue-> values [index]访问数组'values'

编辑:当然你需要确保一旦你释放你考虑到你已经分配的'n*sizeof(int)'和sizeof(Queue_t),其中n = 256在上面的例子中HTH