关于c数组

3 c arrays initialization

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

int nums[5] = {0,1,2,3,4};
Run Code Online (Sandbox Code Playgroud)

但是,你能这样做吗?

int nums[5];
// more code....
nums = { 0,2,5,1,2};
Run Code Online (Sandbox Code Playgroud)

换句话说,我可以在除声明之外的任何其他时间使用括号表示法初始化数组吗?谢谢你的时间,山姆

Joh*_*itb 17

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

int nums[5];
memcpy(nums, (int[5]){1, 2, 3, 4, 5}, 5 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

但是,您无法分配给数组.您只能复制到其内存.您需要在C89中复制的另一个阵列

int nums[5]; 
int vals[] = { 1, 2, 3, 4, 5 };
memcpy(nums, vals, sizeof vals);
Run Code Online (Sandbox Code Playgroud)

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