用{0},{0,}初始化数组
Array initialization with {0}, {0,}?
假设我想初始化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 相关文章:
- C++使用整数的压缩数组初始化对象
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- 运行时C++数组初始化问题
- 使用带有参数包的数组的成员数组初始化类
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- C++ 2 个指针数组初始化 C2440
- C++结构字符数组初始化
- C++中的多维数组初始化
- constexpr数组初始化
- C++引物动态数组初始化程序的数目超过大小
- 使用std::index_sequence对std::数组初始化进行包扩展
- 当 std 数组初始化太小时,C++会引发错误吗?
- 如何确定结构数组初始化的大小?
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 此代码中的数组初始化样式是什么?这是标准的吗?
- C++ 使用数组初始化时的 STL 向量内存管理