gpt4 book ai didi

c - 结构中的二维动态数组

转载 作者:行者123 更新时间:2023-11-30 14:56:26 26 4
gpt4 key购买 nike

我正在为学校学习,我找到了考试任务:“创建带有字段的结构: 2 个整数, 二维灵活数组( double 或浮点)"

我做了类似的事情:

    struct my_struct{
int firstField;
int secondField;
int columns;
int rows;
double tab[columns][rows];
}

struct my_struct sample = {2, 2, 5, 4, {0.0}}

但是它不起作用。我应该如何创建这样的结构?

最佳答案

一个struct不能有 2D VLA 可变逻辑数组,也不能有 2D FAM、灵活数组成员,如成员 double tab[columns][rows]; 。一个struct最终可以得到一维 FAM。

通过使用一个灵活的数组成员(即double *的数组),代码可以接近OP的目标“使用字段创建结构:2个整数,二维灵活数组( double 或浮点)” .

struct my_struct {
int columns;
int rows;
double *tab[/* row */];
};

这使得tab ,不是二维数组,而是 double * 的一维数组。这可以像带有 [][] 的二维数组一样使用。语法。

<小时/>

首先不仅为my_struct分配内存,也适用于附加数组 double *指针。然后为double分配内存每个指针的数组。

与所有分配一样,最好测试分配是否成功。以下简单用途assert(p);

我用一些 TBD 替换了工作代码,以允许 OP 学习经验。

struct my_struct *my_struct_alloc(int columns, int rows) {
struct my_struct *p = malloc(sizeof *p + sizeof *(p->tab) * TBD);
assert(p);
p->columns = TBD;
p->rows = TBD;
for (int r = 0; r < p->rows; r++) {
p->tab[r] = malloc(sizeof *(p->tab[r]) * TBD);
assert(p->tab[r]);
for (int c = 0; c < p->columns; c++) { // sample, fill array w/illustrative data
static int count = 0;
p->tab[r][c] = count++; // Access like a 2D array
}
}
return p;
}

void my_struct_print(struct my_struct *p) {
for (int r = 0; r < p->rows; r++) {
for (int c = 0; c < p->columns; c++) {
printf("%.0f ", p->tab[r][c]); // Access like a 2D array
}
puts("");
}
}

void my_struct_free(struct my_struct *p) {
if (p) {
for (int r = 0; r < p->rows; r++) {
free(p->tab[r]);
}
}
free(p);
}

int main() {
struct my_struct *p = my_struct_alloc(2, 3);
my_struct_print(p);
my_struct_free(p);
}

输出

0 1 
2 3
4 5

关于c - 结构中的二维动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44681592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com