使用{0},{0,}进行数组初始化?

时间:2011-04-08 06:52:21

标签: c++ c arrays initialization

说我想初始化myArray

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

它们是否相同或优先于另一种?

谢谢

6 个答案:

答案 0 :(得分:32)

实际上,我个人建议:

char myArray[MAX] = {};

他们都做同样的事情,但我更喜欢这个;这是最简洁的。 = d

顺便说一句,请注意 char myArray[MAX] = {1}; 将所有值初始化为1!它只将第一个值初始化为1,其余值为零。因此,我建议你不要写char myArray[MAX] = {0};,因为它对某些人来说有点误导,即使它能正常工作。

答案 1 :(得分:20)

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

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

答案 2 :(得分:4)

我认为第一种解决方案是最好的。

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

答案 3 :(得分:1)

可以使用

但我觉得下面的内容更容易理解和可读......

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

答案 4 :(得分:1)

假设你总是想用0初始化。

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

- >当你想要分配0而不是初始化时,应该使用memset()的第三种方式。

- >如果预期此数组只初始化一次,那么您可以将static关键字置于其前面,以便编译器为您完成工作(无运行时开销)

答案 5 :(得分:0)

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

#include <strings.h>
void bzero(void *s, size_t n)

http://linux.die.net/man/3/bzero