用{0},{0,}初始化数组

Array initialization with {0}, {0,}?

本文关键字:数组 初始化      更新时间:2023-10-16

假设我想初始化myArray

char myArray[MAX] = {0};  
char myArray[MAX] = {0,};  
char myArray[MAX]; memset(myArray, 0, MAX);  

它们都是相等的吗?

谢谢

实际上,在c++中,我个人推荐:

char myArray[MAX] = {};

它们都做同样的事情,但我更喜欢c++中的这个;这是最简洁的。(不幸的是,这在c语言中无效)

顺便说一下,请注意 char myArray[MAX] = {1};没有将所有值初始化为1!它只将第一个值初始化为1,其余的初始化为0。因此,我建议你不要写char myArray[MAX] = {0};因为它会误导一些人,尽管它可以正常工作

它们对于生成的代码是等效的(至少在优化构建中),因为当一个数组用{0}语法初始化时,所有未显式指定的值都隐式初始化为0,编译器将知道足够插入对memset的调用。

唯一的区别就是风格。选择将取决于您使用的编码标准,或者您的个人偏好。

我认为第一个解决方案最好。

char myArray[MAX] = {0};  //best of all

两者都可以

但是我觉得下面的内容更容易理解和阅读。

  char myArray[MAX]; 
  memset(myArray, 0, MAX);

假设您总是希望初始化为0。

->你的第一种方式和第二种方式是一样的。我更喜欢1号。

——> memset()的第三种方式应该在你想要赋值0而不是初始化时使用。

——>如果这个数组只初始化一次,那么你可以把static关键字放在它前面,这样编译器就会为你做这项工作(没有运行时开销)

也可以使用bzero fn(写入零值字节)

#include <strings.h>
void bzero(void *s, size_t n)
http://linux.die.net/man/3/bzero