假设我想初始化myArray数组
char myArray[MAX] = {0};
char myArray[MAX] = {0,};
char myArray[MAX]; memset(myArray, 0, MAX);
他们都是相等的,还是有一个比另一个更好一些?谢谢。
假设我想初始化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,其余为零。因此,尽管它可以正常工作,但我建议您不要编写char myArray[MAX] = {0};
,因为它对某些人来说会有点误导性。
在生成的代码方面,它们是等价的(至少在优化过的构建中),因为当使用{0}
语法初始化数组时,所有未明确指定的值都会隐式地初始化为0,并且编译器将足够了解以插入对memset
的调用。
唯一的区别在于风格。选择取决于您使用的编码标准或个人偏好。
我认为第一种解决方案是最好的。
char myArray[MAX] = {0}; //best of all
两种方式都可以使用
但我觉得下面的更易于理解和阅读...
char myArray[MAX];
memset(myArray, 0, MAX);
假设您始终希望初始化为0。
--> 您的第一种方法和第二种方法是相同的。我更喜欢第一种。
--> 当您想要分配0而不是初始化时,应使用memset()
的第三种方式。
--> 如果预计仅对该数组进行一次初始化,则可以在其前面放置static
关键字,以便编译器为您完成工作(无运行时开销)。
你也可以使用bzero函数(写入零值字节)
#include <strings.h>
void bzero(void *s, size_t n)