代码:
int i;
struct st
{
int m;
}st_t[2];
void foo()
{
i = 4;
st_t[2] =
{
{10},{20}
}; // it's wrong !!!! but I don't know how to do.
}
int main()
{
foo();
cout<<i<<endl; // will output 4;
cout<<st_t[0].m<<endl; // this should output 10
cout<<st_t[1].m<<endl; // this should output 20
return 0;
}
是否可以在函数中定义结构数组?如果是,那该怎么办? 提前致谢。
PS:
对不起,我的英语不好。我正在制作一个俄罗斯方块游戏,它有一个Shape类,我在Shape.h中声明了一个形状结构数组,然后我在Shape.cpp中的Shape构造函数中分配给struct数组。这样对吗?或者如何分配给struct数组,以便我可以在另一个函数中使用它?
答案 0 :(得分:2)
您可以在定义的位置初始化数组。即要么将定义移动到函数中,要么将初始化移出函数:
struct st
{
int m;
}
st_t[2] = {{10},{20}};
答案 1 :(得分:0)
如果要在函数中定义数组(如问题标题和文本所示),则将类型说明符st
添加到定义中:
st st_t[2] =
{
{10},{20}
};
但是,这将是一个单独的数组到全局的数组,因此main()
的输出将与您的评论所说的不匹配。如果您确实想要分配给全局数组,那么:
st_t[0].m = 10;
st_t[1].m = 20;
或者,在C ++ 11中,如果用std::array
替换plain数组,则可以使用与示例类似的语法:
std::array<st, 2> st_t;
void foo() {
// Note the extra braces - std::array is an aggregate containing an array
st_t =
{{
{10},{20}
}};
}
答案 2 :(得分:0)
如果你只想要函数范围的变量那么
void foo() {
struct {
int m;
} st_t = { {10}, {20} };
// do something
}
答案 3 :(得分:0)
您可以初始化临时变量并将此变量复制到全局变量,而不是直接赋值:
删除:
...
st_t[2] = {
{10},{20}
};
...
并添加:
...
st tmp[2] = { {10}, {20} };
memcpy(st_t, tmp, sizeof st_t);
...
<强>附录:强>
如果它不适合您,则代码中可能会出现其他错误。从你的例子:
#include <iostream>
#include <memory.h>
using namespace std;
int i;
struct st { int m; } st_t[2];
void foo()
{
i = 4;
st tmp[2] = { {10}, {20} };
memcpy(st_t, tmp, sizeof st_t); // use: const_addr instead of &const_addr
}
int main()
{
foo();
cout << i << endl; // will output 4;
cout << st_t[0].m << endl; // this should output 10
cout << st_t[1].m << endl; // this should output 20
return 0;
}
所有工作都按预期正常。