C的数组排序问题 “bb[cnt]=aa[i];”这里被提示错误错误:1 error C2106: “=”: 左操作数必须为左值

#include<stdio.h>#include<stdlib.h>intmain(void){intaa[20][3]={{111,222,333},{123,321... #include <stdio.h>
#include <stdlib.h>
int main(void)
{
int aa[20][3]={{111,222,333},{123,321,101},{987,501,721},{889,354,100},{120,901,301},{456,761,402},{129,980,999},
{223,120,543},{123,821,342},{211,234,902},{541,230,111},{601,562,203},{233,765,122},{801,999,201},
{102,103,912},{987,120,302},{706,607,543},{201,333,456},{504,421,312},{450,123,670}};
int bb[20][3];
int i,j,g,h,cnt=0,temp[3];
for (i=0;i<20;i++)
{
if (aa[i][1]>aa[i][0]+aa[i][2])
{
bb[cnt]=aa[i];
cnt++;
}
}
for (j=0;j<cnt-1;j++)
for (g=j+1;g<cnt;g++)
{
if (bb[j][1]+bb[j][2]<bb[g][1]+bb[g][2])
{
temp=bb[j];
bb[j]=bb[g];
bb[g]=temp;
}
}
for (h=0;h<cnt;h++)
{
printf ("&d ",bb[h][]);
}
}
展开
 我来答
GAIGUANGYEXING
2013-03-17 · 超过20用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:32.8万
展开全部
当声明数组时,他在内存的地址就确定了,数组操作实质还是对指针的操作。
具体来说:
当你声明bb[20][3]时,其实就有一个指针bb指向数组的开头,而bb[0]的值就是数组的第1行的地址,以此类推。
你可以用printf("%d",bb[0]);测试。输出的是一个整数,表示数组的第1行在内存中的地址。
所以你用bb[cnt]=aa[i]时,其实就是把aa[i]的值赋给一个常量(因为bb[cnt]是bb数组第cnt+1行的地址,已经确定,不能改变。)
所以会出错。
你可以再加一个内层循环,把aa[i][j]的每个值赋给bb[cnt][j],就可以了。
关于指针你如果不懂,可以查一下有关书籍。
来自:求助得到的回答
帐号已注销
2013-03-17 · TA获得超过3000个赞
知道大有可为答主
回答量:1338
采纳率:75%
帮助的人:1300万
展开全部
错误太多了。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main(void)
{
int aa[20][3]={{111,222,333},{123,321,101},{987,501,721},{889,354,100},{120,901,301},{456,761,402},{129,980,999},
{223,120,543},{123,821,342},{211,234,902},{541,230,111},{601,562,203},{233,765,122},{801,999,201},
{102,103,912},{987,120,302},{706,607,543},{201,333,456},{504,421,312},{450,123,670}};
int bb[20][3];
int i,j,g,h,cnt=0,temp[3];
for (i=0;i<20;i++)
{
if (aa[i][1]>aa[i][0]+aa[i][2])
{
//bb[cnt]=aa[i];
memmove(bb[cnt], aa[i], sizeof(bb[0]));
cnt++;
}
}
for (j=0;j<cnt-1;j++)
for (g=j+1;g<cnt;g++)
{
if (bb[j][1]+bb[j][2]<bb[g][1]+bb[g][2])
{
//temp=bb[j];
//bb[j]=bb[g];
//bb[g]=temp;
memmove(temp, bb[j], sizeof(bb[0]));
memmove(bb[j], bb[g], sizeof(bb[0]));
memmove(bb[g], temp, sizeof(bb[0]));
}
}
for (h=0;h<cnt;h++)
{
for (i = 0; i < 3; i++)
printf ("%d ",bb[h][i]);

printf("\n");
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
arongustc
科技发烧友

2013-03-17 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:6013万
展开全部
数组不允许整个赋值,你只能对其元素赋值,用一个循环对它每个元素赋值
printf ("&d ",bb[h][]);这也是不允许得,bb[h][]我估计你是想打印bb[h]得每个元素,但是你不允许这么坐,你只能写个循环挨个打印, &d肯定也是错误得
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式