动态数组问题---百思不得其解,100分求解
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int iNodeCount=3;
int irow=iNodeCount*2;
int icol=iNodeCount*2;
int iarr=irow*irow;
double * iArrDM=new double[iarr];
for(int i=0;i <irow;i++)
{
for(int j=0;j <icol;j++)
{
*(iArrDM+i+j)=0;
}
cout < <endl;
}
iArrDM[0]=1;
iArrDM[1]=2;
for(int w=0;w <irow;w++)
{
for(int m=0;m <icol;m++)
{
cout < <*(iArrDM+w+m) < < "# ";
}
cout < <endl;
}
delete [] iArrDM;
system( "PAUSE ");
return EXIT_SUCCESS;
}
我预想上面的代码的输出结果应该是
1#2#0#0#0#0#
0#0#0#0#0#0#
0#0#0#0#0#0#
0#0#0#0#0#0#
0#0#0#0#0#0#
0#0#0#0#0#0#
第一行为1 2 0 0 0 0
可是实际结果是
1#2#0#0#0#0#
2#0#0#0#0#0#
0#0#0#0#0#0#
0#0#0#0#0#0#
0#0#0#0#0#0#
0#0#0#0#0#0#
第二行多出了一个2
第二行变成了2 0 0 0 0 0
我只输入了一个iArrDM[1]=2;怎么会有两个2,
郁闷!!!
求助!!!!
编译器为devCPP and vc++ 6.0
[解决办法]
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int iNodeCount=3;
int irow=iNodeCount*2;
int icol=iNodeCount*2;
int iarr=irow*irow;
double * iArrDM=new double[iarr];
for(int i=0;i <irow;i++)
{
for(int j=0;j <icol;j++)
{
*(iArrDM+i * icol +j)=0;
}
cout < <endl;
}
iArrDM[0]=1;
iArrDM[1]=2;
for(int w=0;w <irow;w++)
{
for(int m=0;m <icol;m++)
{
cout < <*(iArrDM+w * icol +m) < < "# ";
}
cout < <endl;
}
delete [] iArrDM;
system( "PAUSE ");
return EXIT_SUCCESS;
}
[解决办法]
当使用一维数组模拟多维时候,
注意数组下标的计算方式:
arr[i][j] ~ *(*(arr+i)+j)
注意arr 是行指针, arr+i 是行移动,
故使用 1维时候, arr+i ~ a+i*colomn
------解决方案--------------------
行为1列为0和列为1行为0和都是1
当然输出两个2了
[解决办法]
下标转换不对.
cout < <*(iArrDM+w * icol +m) < < "# ";
行移动一个位置,就是icol个元素.