Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于c数组_C_Arrays_Initialization - Fatal编程技术网

关于c数组

关于c数组,c,arrays,initialization,C,Arrays,Initialization,我知道你可以像这样在C中声明一个数组: int nums[5] = {0,1,2,3,4}; 然而,你能做到这一点吗 int nums[5]; // more code.... nums = { 0,2,5,1,2}; 换句话说,我可以在任何其他时间使用括号符号初始化数组吗 不仅仅是宣言? 谢谢你抽出时间, 山姆这是不可能的简单的回答是:不可能 初始化C数组只能在声明时进行。标准规定,不可能使用赋值表达式一次将其赋值给数组的所有元素。您只能在声明期间执行此操作 但是,您可以通过使用标准函数进

我知道你可以像这样在C中声明一个数组:

int nums[5] = {0,1,2,3,4};
然而,你能做到这一点吗

int nums[5];
// more code....
nums = { 0,2,5,1,2};
换句话说,我可以在任何其他时间使用括号符号初始化数组吗 不仅仅是宣言? 谢谢你抽出时间,
山姆

这是不可能的

简单的回答是:不可能


初始化C数组只能在声明时进行。

标准规定,不可能使用赋值表达式一次将其赋值给数组的所有元素。您只能在声明期间执行此操作


但是,您可以通过使用标准函数进行复制来实现您想要做的事情。

不。您示例中的声明

int nums[5] = {0,1,2,3,4};
…称为初始值设定项。初始值设定项是指定数组元素初始值的数据声明的一部分

如果在没有初始值设定项的情况下创建数组,那么您就不走运了。您必须以老式的方式为数组元素赋值。

这在C89(大多数C编译器的目标)中是不可能的。C99受少数支持,并具有复合文字:

int nums[5];
memcpy(nums, (int[5]){1, 2, 3, 4, 5}, 5 * sizeof(int));
但是,您不能指定给数组。您只能复制到它的内存中。您需要从C89中复制另一个阵列

int nums[5]; 
int vals[] = { 1, 2, 3, 4, 5 };
memcpy(nums, vals, sizeof vals);

请注意,
sizeof
运算符以字节为单位返回其操作数的大小。

您可以将nums声明为指针

int * nums;
然后,您可以稍后将数组分配给该指针:

int tmp[5] = {0,1,2,3,4};

nums = tmp;

哇,太酷了,我不知道。:)我想我从来没有在真正的代码中看到过。现在所有合理的编译器都支持C99,所以这可能很有用。你们真是太棒了!你回答得太快了!你让我感觉好多了。它快把我逼疯了。谢谢