简单的C数组声明/赋值问题

Dan*_*ood 7 c arrays declaration variable-assignment

在更高级别的语言中,我将能够在C中使用类似于此示例的内容,并且它会很好.但是,当我编译这个C例子时,它会痛苦地抱怨.如何将新数组分配给我声明的数组?

int values[3];

if(1)
   values = {1,2,3};

printf("%i", values[0]);
Run Code Online (Sandbox Code Playgroud)

谢谢.

Mar*_*off 12

在声明数组时,您只能对数组进行多次赋值:

int values[3] = {1,2,3};
Run Code Online (Sandbox Code Playgroud)

声明后,您必须单独分配每个值,即

if (1) 
{
  values[0] = 1;
  values[1] = 2;
  values[2] = 3;
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用循环,具体取决于您要使用的值.

if (1)
{
  for (i = 0 ; i < 3 ; i++)
  { 
    values[i] = i+1;
  }
}
Run Code Online (Sandbox Code Playgroud)


Kar*_*and 7

在C99中,使用复合文字,您可以:

memcpy(values, (int[3]){1, 2, 3}, sizeof(int[3]));
Run Code Online (Sandbox Code Playgroud)

要么

int* values = (int[3]){1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

  • +1; 请记住,在后一种情况下,数组将具有自动存储持续时间,即从函数返回它将让你被grue吃掉 (3认同)

Mic*_*ker 3

您可以使用要初始化的数据声明静态数组:

\n\n
static int initvalues[3] = {1,2,3};\n\xe2\x80\xa6\nif(1)\n    memmove(values,initvalues,sizeof(values));\n
Run Code Online (Sandbox Code Playgroud)\n

  • @Michael:@caf 的意思是在给定的场景中不需要移动内存,因为源和目标不重叠。这样,memcpy 可能会稍微快一些。请参阅此http://stackoverflow.com/questions/1201319/what-is-the-difference- Between-memmove-and-memcpy (3认同)