我做了一个简单的程序来计算矩阵,这里是代码:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int result[3] = {0,0,0};
int matrixc[3][6] = {
{0,0,0,0,0,1},
{0,0,0,1,1,1},
{1,0,1,0,0,1}
};
for(int x=0;x <3;x++)
{
for(int y=0;y < 6;y++)
{
result[x] += (matrixc[x][y] * pow(2,6-y));
}
cout << result[x] << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
输出是我想要的,它是:2,14,and 82.但是,当我删除整数数组中的初始化时result:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int result[3]; //deleted initialization
int matrixc[3][6] = {
{0,0,0,0,0,1},
{0,0,0,1,1,1},
{1,0,1,0,0,1}
};
for(int x=0;x <3;x++)
{
for(int y=0;y < 6;y++)
{
result[x] += (matrixc[x][y] * pow(2,6-y));
}
cout << result[x] << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
我有奇怪的输出:1335484418,32618, and 65617.
您想解释一下为什么在有和没有初始化的数组之间输出会有所不同吗?
实际上,我不想初始化所有result数组,因为我有一个庞大的矩阵数据.
如果我在std::vector没有初始化所有result数组的情况下使用它是否可能?
您想解释一下为什么在有和没有初始化的数组之间输出会有所不同吗?
如果没有初始化,则不会初始化自动变量.它们具有不确定的价值,取决于它们占据的记忆.
实际上,我不想初始化所有"结果"数组,因为我有一个庞大的矩阵数据.
您可以对整个数组进行零初始化,即使它很大,如下所示:
int result[huge] = {};
Run Code Online (Sandbox Code Playgroud)
虽然,如果它是巨大的,那么它不应该是一个自动变量.这些通常保留在堆栈上,这通常不是很大,如果你把太多的东西放在它上面,它可能会溢出.
如果我在不初始化所有"result"数组的情况下使用std :: vector,是否可能?
是的,默认情况下,矢量将零元素初始化.