教科书上的一道例题,在TC上运行不正确,why?
题目如下:
编写3*3数组交换第二列与第三列数据的程序。
程序书写如下:
#include <stdio.h>
#define M 3
#define L1 1
#define L2 2
column(int (*a)[M],int i,int j)
{
int *p,*r,*y,x;
p=*a+i;y=*a+j;r=*(a+M);
while(y <r)
{x=*p;*p=*y;*y=x;p+=M;y+=M;}
}
main()
{
int k[M][M],(*p)[M],i,j,n=0;
p=k;
for(i=0;i <M;i++)
for(j=0;j <M;j++)
scanf( "%d ",p[i]+j);
column(k,L1,L2);
for(i=0;i <M;i++)
for(j=0;j <M;j++)
{
printf( "%d ",*((*p+i)+j));
n+=1;
if(n%M==0) printf( "\n ");
}
}
本人原原本本将书上的程序拓印下来,可在TC上运行总得不到意想中的结果,很是郁闷!高手给看看原因是啥?
[解决办法]
那个函数交换是正确的,只是你打印的表达式printf( "%d ",*((*p+i)+j))不对,可改为:
printf( "%d ",*(p+i*M+j));