初始化数组、"memset"或" {//value} "的最佳方法是什么?
which is best way to initialize array, "memset" or " {//value} "?
int main(){
int ar[50]={1};
//OR
int br[50];
memset(br, 1, sizeof(br));
return 0;
}
int ar[50]={1};
这将仅将第一个元素设置为1
。其余的都将0
.
memset(br, 1, sizeof(br));
这会将br
中的所有字节设置为 1。这与将所有值设置为1
不同。之后的值为:
{16843009, 16843009, 16843009, 16843009, 16843009}
当您知道自己确实需要memset
时,请使用它。它并不完全是为了初始化数组而制作的,它只是将内存设置为特定值。
C++的最佳方式?使用std::fill
或std::fill_n
。
例:
int array[5];
std::fill(array, array + 5, 8);
数组现在包含:
{8, 8, 8, 8, 8}
使用fill_n
std::fill_n(array, 5, 99);
数组现在包含:
{99, 99, 99, 99, 99}
作为旁注,更喜欢使用std::array
而不是 c 样式数组。
试穿神电:https://godbolt.org/z/DmgTGE
参考资料:
[1] : 数组初始化
[2] : 内存集文档
假设你这样做
int ar[50] = {-1};
现在你会期望这一行用 -1 初始化所有数组元素 但事实并非如此。它只会将数组的第一个元素设置为 -1,将 rest 设置为 0。 而 memset 将显示预期的行为。
有关详细信息,请参阅此将数组的所有元素初始化为C++中的一个默认值?
让我们举个例子:-
int arr[5] = { 1, 2 }; // this will initialize to 1,2,0,0,0
int ar[5] = { }; // this will initialize all elements 0
int myArray[10] = {}; // his will also all elements 0 in C++ not in c
因此,如果要将特定值初始化为数组,请使用memset((。
如果要将数组中的所有元素初始化为 0,请使用
static int myArray[10]; // all elements 0
因为如果未指定初始值设定项,具有静态存储持续时间的对象将初始化为 0,并且它比 memset(( 更具可移植性。
此外,int ar[50]={0};
将是无限的,因为它只是初始化数组并且没有结尾,但memset(arr,0,sizeof(br))
它具有结束数组循环的正确方法
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?