ç初始化结构中的数组 [英] C initialize array within structure
本文介绍了ç初始化结构中的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想有一个包含结构中的变长数组,但我有麻烦了正确的初始化。
I want to have an variable-length array contained within a structure, but am having trouble initializing it correctly.
struct Grid {
int rows;
int cols;
int grid[];
}
int main() {
struct Grid testgrid = {1, 3, {4, 5, 6}};
}
一切我试图给我的'错误:灵活数组成员的非静态初始化。误差
Everything I try gives me an 'error: non-static initialization of a flexible array member' error.
推荐答案
您可以通过使结构为静态
或全局使海湾合作委员会的工作,但事实证明,该初始化灵活数组成员是不合格,所以它很可能只是用gcc到不行。这里是一个办法做到这一点,仅仅使用C99符合要求的功能...
You can make that work in gcc by making the struct either static
or global, but it turns out that initializing flexible array members is non-conforming and so it is likely to not work except with gcc. Here is a way to do it that just uses C99-conforming features...
#include <stdlib.h>
#include <stdarg.h>
typedef struct Grid {
int rows;
int cols;
int grid[];
} *Grid;
Grid newGrid(int, int, ...);
Grid newGrid(int rows, int cols, ...)
{
Grid g;
va_list ap;
int i, n = rows * cols;
if((g = malloc(sizeof(struct Grid) + rows * cols * sizeof(int))) == NULL)
return NULL;
g->rows = rows;
g->cols = cols;
va_start(ap, cols);
for(i = 0; i < n; ++i)
g->grid[i] = va_arg(ap, int);
va_end(ap);
return g;
}
.
.
.
Grid g1, g2, g3;
g1 = newGrid(1, 1, 123);
g2 = newGrid(2, 3, 1, 1, 1,
2, 2, 2);
g3 = newGrid(4, 5, 1, 2, 3, 4, 5,
6, 7, 8, 9, 10,
11, 12, 13, 14, 15,
16, 17, 18, 19, 20);
这篇关于ç初始化结构中的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文