为什么不允许使用C(或C ++)?
我的意思是:
ucell GetPlayerPosPositionData[5];
GetPlayerPosPositionData = {4*sizeof(cell),playerid,0,sizeof(cell),2*sizeof(cell)};//this does not work, error
//normal assignment
GetPlayerPosPositionData[1] = playerid;
GetPlayerPosPositionData[2] = 0;
GetPlayerPosPositionData[3] = sizeof(cell);
GetPlayerPosPositionData[4] = 2*sizeof(cell);
答案 0 :(得分:2)
因为数组不可分配。您可以在声明点初始化它们,也可以按元素分配它们,但就是这样。这可行:
ucell GetPlayerPosPositionData[] = {4*sizeof(cell),
playerid,
0,
sizeof(cell),
2*sizeof(cell)};
答案 1 :(得分:1)
因为语法说不允许?该问题分为两部分:
除初始化程序或复合文字中的(在C99中)外,您不能使用初始化程序语法。
您无法分配整个数组。
在C99中,您可以将数组传递给函数:
typedef unsigned int cell;
extern void some_func(cell data[]);
extern void func(void);
void func(void)
{
cell playerid = 0;
some_func((cell[]){4*sizeof(cell),playerid,0,sizeof(cell),2*sizeof(cell)});
}
(您的问题在cell
vs ucell
上不明确;我选择始终使用cell
。)
你仍然无法进行数组赋值。如果数组被包装在一个结构中,你可以进行结构赋值,巧合的是,它会分配包含的数组。但这是一个结构赋值,而不是数组赋值。
答案 2 :(得分:0)
该语法用于列表初始化数组。它只能用作数组声明的初始值设定项:
ucell GetPlayerPosPositionData[5] = {4*sizeof(cell),playerid,0,sizeof(cell),2*sizeof(cell)};
另一种方法是单独分配每个元素:
ucell GetPlayerPosPositionData[5];
GetPlayerPosPositionData[0] = 4 * sizeof(cell);
GetPlayerPosPositionData[1] = playerid;
GetPlayerPosPositionData[2] = 0;
GetPlayerPosPositionData[3] = sizeof(cell);
GetPlayerPosPositionData[4] = 2 * sizeof(cell);
答案 3 :(得分:0)
我会让语言律师为此辩论。假设array
被声明为int array[4]
,并且您希望将其分配给它。然后考虑:
* (struct t { int array[4]; } *) array = (struct t) {{ 0, 1, 2, 3 }};