编程在行地址转换处遇到 invalid lvalue in assignment

[复制链接]
查看11 | 回复1 | 2011-6-9 16:31:10 | 显示全部楼层 |阅读模式
#define N 6
#define M 5
#include
void fun(int a[M][N])
{int i,j,k,p,q;
int(*r)[N];
for(k=0;k<M;k++)
{

for(i=0,p=0;i<N;i++)

{

for(j=i+1;j<N;j++)

{

if(a[k]<a[k][j])

p=1;

}

if(p=0)

{

q=a[k][N-1];

a[k][N-1]=a[k];

a[k]=q;

break;

}

}
/*以上为将各行最大值放在其末位
*/
}
for(i=0;i<M;i++)

{

for(j=i;j<M;j++)

{

if(a[j][M-1]<a[j+1][M-1])

{

r=a+j;

(a+j)=(a+(j+1));/*总在这里报错*/

a+(j+1)=r;

}

}

}
}
void main()
{int x[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},
{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;
fun(x);
for(i=0;i<M;i++)
        {for(j=0;j<N;j++)
                printf("%3d",x[j]);
         printf("\n");
        }
}

回复

使用道具 举报

千问 | 2011-6-9 16:31:10 | 显示全部楼层
(a+j)=(a+(j+1));a+(j+1)=r;这两句都有问题,a+j返回的并不是一个左值,因此不能对它进行赋值操作。你这里定义的是一个二维数组,空间都是线性的,不可能进行地址交换。你需要把这两行数据进行交换,你可以定义一个1行6列的中间数组变量作为转换的中间变量...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行