【问题标题】:using memset to initialise the int array [duplicate]使用 memset 初始化 int 数组 [重复]
【发布时间】:2017-02-18 07:21:43
【问题描述】:
#include<bits/stdc++.h> 
using namespace std;
int main()
{
    int arr[1010];
    memset(arr,1,sizeof(arr));
    cout<<arr[1]<<endl;
    return 0;
}

我正在尝试初始化值为 1 的数组。 我希望我的 o/p 为 1。但是我得到了一些随机数(16843009)作为程序的 o/p。我不明白代码有什么问题???

当我尝试使用值 -1 和 0 初始化数组时,我得到了预期的答案。是否可以使用值不是 -1 和 0 的 memset 来初始化 int 数组??????

【问题讨论】:

  • 想过使用for 循环来初始化它吗?!
  • 仅当您想将内存清零时才使用 memset。如上所述 - 它只对字节有效,这就是为什么你会得到这个值:0x01010101 == 16843009
  • 另外using namespace std 不好见here
  • 另外,使用#include&lt;bits/stdc++.h&gt;is equally bad
  • 而在 C++ 中,您有 std::fill 用于填充值(而不仅仅是字节)。

标签: c++ memset


【解决方案1】:

memset 设置单个字节,而不是整个整数,通常跨越四个字节。如果您查看数字 16843009 的位,它就是您得到的四个字节的值为 1。正如 Ed Heal 所说,不要使用 memset 使事情复杂化。请改用循环。

【讨论】:

  • thanx... 但是还有其他方法可以初始化而不是使用 for 循环.. 我问这个的原因是....如果我有 5-d 数组...我需要为嵌套语句编写 5 以初始化数组...我可以通过编写更小的代码来做到这一点..
  • @satyamshekhar:您可以使用单个循环,但这将是既模糊又脆弱的代码,甚至可能无法保证正常工作。不要把事情复杂化。如果您有一个五维数组,请使用五个嵌套循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
相关资源
最近更新 更多