当您尝试使用arr = {values};为数组赋值时,为什么会发生错误?

时间:2012-12-08 20:44:16

标签: c++ c arrays variable-assignment

为什么不允许使用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 个答案:

答案 0 :(得分:2)

因为数组不可分配。您可以在声明点初始化它们,也可以按元素分配它们,但就是这样。这可行:

ucell GetPlayerPosPositionData[] = {4*sizeof(cell),
                                    playerid,
                                    0,
                                    sizeof(cell),
                                    2*sizeof(cell)};

答案 1 :(得分:1)

因为语法说不允许?该问题分为两部分:

  1. 除初始化程序或复合文字中的(在C99中)外,您不能使用初始化程序语法。

  2. 您无法分配整个数组。

  3. 在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 }};