0

为什么不允许在 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);
4

4 回答 4

2

因为数组是不可分配的。您可以在声明时初始化它们,也可以基于每个元素分配它们,仅此而已。这会起作用:

ucell GetPlayerPosPositionData[] = {4*sizeof(cell),
                                    playerid,
                                    0,
                                    sizeof(cell),
                                    2*sizeof(cell)};
于 2012-12-08T20:48:40.303 回答
1

因为语法说它是不允许的?问题有两个部分:

  1. 除了在初始值设定项中或(在 C99 中)在复合文字中之外,您不能使用初始值设定项语法。

  2. 您不能分配整个数组。

在 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自始至终使用。)

你仍然不能做数组赋值。如果数组包含在结构中,您可以执行结构分配,巧合的是,分配包含的数组。但这是一个结构赋值,而不是一个数组赋值。

于 2012-12-08T20:52:40.127 回答
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);
于 2012-12-08T20:48:43.617 回答
0

我会让语言律师对此进行辩论。假设array被声明为int array[4],并且您希望分配给它。然后考虑:

* (struct t { int array[4]; } *) array = (struct t) {{ 0, 1, 2, 3 }};
于 2012-12-09T00:11:53.567 回答