当定义和声明分开时,如何一次性初始化数组的所有元素?

2023-12-04

当我们写这样的东西时

int arr[5] = 0; or int arr[5] = {0};

没有问题

但是当我们做这样的事情时

int arr[5];
arr[5] = {0};

发生错误。对此有何解释?


数组可以初始化,但不能直接赋值,这只是语言定义的一部分。您可以使用 C99 做您想做的事情memcpy()使用复合文字:

int arr[5];

/* ... */

memcpy(&arr, &(int [5]){ 0 }, sizeof arr);

与海湾合作委员会typeof扩展,您可以添加更多安全性:

memcpy(&arr, &(typeof(arr)){ 0 }, sizeof arr);

在 C89 中,您必须为源数组命名:

{ static const int zero[5] = { 0 }; memcpy(&arr, &zero, sizeof arr); }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当定义和声明分开时,如何一次性初始化数组的所有元素? 的相关文章

随机推荐