【发布时间】:2019-03-20 00:57:26
【问题描述】:
我有一个结构,比如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}}
【问题讨论】:
-
您正在尝试获取临时地址(未定义的行为),并且您正在尝试将指向指针的指针视为二维数组(它们不是二维数组)。
-
@SergeyA 获取地址可能不是问题。复合文字有一个封闭块的存储时间,标准至少有一个在这种情况下取地址的例子。
-
@user694733 虽然复合文字可以,但从它创建的
foo类型的临时变量却没有。