读书人

动态数组有关问题-百思不得其解,100分

发布时间: 2012-04-06 12:22:24 作者: rapoo

动态数组问题---百思不得其解,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个元素.

读书人网 >C++

热点推荐