为何原数组的值会改变??
#include
#define COLS 5
void copyPtr(int rows,const double (*ar)[COLS] , double (*pr)[COLS]);
void show(int rows,const double (*ar)[COLS]);
int main(void)
{
const double source[][COLS]={
{1.1,2.2,3.3,4.4,5.5},
{9.9,8.8,7.7,6.6,5.5},
{3.3,4.4,6.6,8.8,9.9}};
double target[][COLS]={0};
copyPtr(3,source,target);
show(3,source);
show(3,target);
getchar();
return 0;
}
void copyPtr(int rows,const double (*ar)[COLS] , double (*pr)[COLS])
{
int i,j;
for( i = 0 ; i < rows; ++i)
{
for( j = 0 ; j <COLS ; ++j)
pr[i][j]=ar[i][j];
}
}
void show(int rows,const double (*ar)[COLS])
{
int i,j;
for(i=0;i<rows;++i)
{ for(j=0;j<COLS;++j)
printf("%4.1lf",ar[i][j]);
} printf("\n");
你把++i ++j变成 i++ j++运行下,看看结果
楼上说的有道理,,++i ++j,,,你用这个访问有问题,会数组下标越界,,不过C语言数组越界不会报错,,
也就是你的,source访问的时候访问到,,target的地方去了(但是结果确实有点怪)
结果有个规律,,
等分三段,上面的前两段和下面的后两段是一样的,上面的第三段和下面的第三段是一样的(出乎意料哎。打个断点看看地址,访问的情况。)
楼上说的对,下标越界
声明两个二维数组时要注明行数,比如:const double source[3][COLS];