关于c数组
我知道你可以像这样在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数组只能在声明时进行。标准规定,不可能使用赋值表达式一次将其赋值给数组的所有元素。您只能在声明期间执行此操作 但是,您可以通过使用标准函数进
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,所以这可能很有用。你们真是太棒了!你回答得太快了!你让我感觉好多了。它快把我逼疯了。谢谢