c - 如何将二维数组静态初始化为指向指针的指针?
问题描述
我有一个结构,说它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}
}
};
推荐阅读
- python - 以货币显示的最大金额
- python - 访问 Heroku 部署的 Flask 应用程序时出错
- python - Python for 循环如何处理列表?
- python - 在 Django 上 Docker 安装 Jupyter 失败
- c++ - 如何在多个函数声明中重用相同的默认参数?
- python - 如何将列表变成字典?
- facebook - Google Analytics 中的 Facebook 跟踪
- python - 如何在 pyspark 中创建不同的随机值?
- python - 将 numpy 2D 数组的行与一个或多个数组进行比较而不循环
- python - 更新 db 的返回值以使其可循环