C++11 未用值填充二维双数组

C++11 未用值填充二维双数组,c++11,multidimensional-array,double,C++11,Multidimensional Array,Double,在我的程序中,我试图用DBL_MAX的常量值填充二维双精度数组。但是,当我调试代码时,我发现数组中填充的是值0,而不是DBL_MAX,即使在我跳过数组填充代码之后也是如此。我做错什么了吗 这是我填充双2d阵列的代码 double array[150][150]; memset(array, DBL_MAX, sizeof(array)); memset将每个字节设置为提供的值。但是,实际上您需要将每个设置为双 您可以使用: double array[150][150]; std::fill_n

在我的程序中,我试图用
DBL_MAX
的常量值填充二维双精度数组。但是,当我调试代码时,我发现数组中填充的是值0,而不是
DBL_MAX
,即使在我跳过数组填充代码之后也是如此。我做错什么了吗

这是我填充双2d阵列的代码

double array[150][150];
memset(array, DBL_MAX, sizeof(array));

memset
将每个字节设置为提供的值。但是,实际上您需要将每个
设置为双

您可以使用:

double array[150][150];
std::fill_n(&array[0][0], 150 * 150, DBL_MAX);   // #include <algorithm>
双数组[150][150];
std::fill_n(&array[0][0],150*150,DBL_MAX);//#包含想法。

memset()
对于这里的工作来说是错误的工具

声明如下:

void* memset( void* dest, int ch, std::size_t count );
其中,
ch
将分配给数据的每个字节。如果您测试什么是
DBL_MAX
,当转换为int时,您可以确认得到零的原因:

int x = DBL_MAX;
std::cout << x << "\n"; // prints 0

<> > >编辑< <强>:因为你已经把它标记为C++ 11,一个一般的注释:除非你与API和直接在内存中工作的接口交互,在编写现代C++代码时,你不应该用“内存”来思考。即使在处理核心数据类型时,将它们视为对象几乎总是更好的。如果您使用的是任何旧的
mem…
接口,则很可能是从错误的角度解决问题。

memset(array,DBL_MAX,sizeof(array[0][0])*m*n;m和n将是150U,我很好奇ur编译器是否允许这样做:int数组[n][m]={DBL_MAX}@OmidCompSCI我尝试了
{DBL_MAX}
,但它只填充
数组[0][0]
元素。另外,
memset(数组,DBL_MAX,sizeof(数组[0][0])*m*n)无效。请尝试:memset(数组,DBL_MAX,sizeof(int[150][150])@OmidCompSCI嗯,那也不行。谢谢你的提示
for(auto& l : array) {
  for (auto& c : l) {
    c = DBL_MAX;
  }
}