gpt4 book ai didi

c - 如何将二维数组静态初始化为指向指针的指针?

转载 作者:太空宇宙 更新时间:2023-11-04 06:48:09 28 4
gpt4 key购买 nike

我有一个结构,比如 foo 看起来像这样,

struct foo {
size_t n;
size_t **point;
};

结构中还有其他成员,它们对问题不重要。现在,我想对结构进行静态初始化。

int main(void)
{
struct foo *bar = &(struct foo){
.n=4,
/* ERROR HERE */ .point=(size_t[][n]){ {1, 2, 3, 4}, {5, 6, 7, 8}}
};
return 0;
}

指示的行中有两个问题。首先,编译器无法识别 n 是可以理解的,有没有什么方法可以在不创建变量的情况下做类似的事情?其次,也是最重要的,我意识到我不知道如何创建一个二维数组并将其分配给静态指针的指针。请帮忙。我尝试了以下变体,但没有任何效果。

/* Variation 1 */   .point=(size_t[][4]){ {1, 2, 3, 4}, {5, 6, 7, 8}}
/* Variation 2 */ .point=(size_t**)(size_t[][4]){ {1, 2, 3, 4}, {5, 6, 7, 8}}
/* Variation 3 */ .point=&(size_t[][4]){ {1, 2, 3, 4}, {5, 6, 7, 8}}

最佳答案

请注意,这在技术上不是二维数组,而是指针到指针数组。但由于复合文字不能具有可变长度数组类型,而且您似乎不想使用硬编码维度,这可能是唯一的出路。

您需要将数组拆分为未知大小的一维数组,并为它们使用单​​独的复合文字:

struct foo * bar = &(struct foo){
.n = 4,
.point = (size_t*[]){
(size_t[]){1, 2, 3, 4},
(size_t[]){5, 6, 7, 8}
}
};

关于c - 如何将二维数组静态初始化为指向指针的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55243693/

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