non-lvalue in assignment是什么意思?
non-lvalue in assignment 译文:赋值中无左值
意思是:在该程序指令中没有左值,因为左值是对象的地址。类型的引用参数
只能接受本类型对象的左值。无左值是不允许的,所以出现该错误提示。
lvalue(左值)是指具有显式存储地址,能够位于赋值运算符左边(所以叫左值)的表达式。例如a, b, c这样的变量是左值,但 a+b 不是左值,因为它的值是系统临时生成的,没有显式存储地址。
你的程度(让编译器理解成)把类似 a+b 这样的非左值表达式做++运算,这样是不允许的,所以报这个错。
你再检查一下有没有让编译器误解的地方,改过来就行了。
左值是赋值运算(“=”操作)中的概念,比如
int a = 10;//a就是左值,需要a是一个变量
而你不能写成
10 = a;//错误,10是常量,不能做左值
同理,如果定义了常量类型,如
const int a = 10;
a = 20;//错误,a是常量,不能做左值
另外,表达式也不能作为左值出现,比如
int a = 10;
int b = 20;
a + b = 40;//错误,即使表达式里全部包含变量也不能作为左值,至于原因,你可以这样理解,就像分10元钱给张三和李四,如何分是不确定的。当然这只是个例子,你还可以有别的解释
a + 10 = 50;//错误
总结起来就是,左值是可以对其进行赋值的对象
#include<stdio.h>
#define IN 1 //inside a word
#define OUT 0 //outside a word
#define MAXHIST 5 //max length of histogram
#define MAXWORD 11 //max length of a word
/*print horizontal histogram*/
main()
{
int c,i,nc,state;
int len; //length of each bar
int maxvalue; //maximum value for wl[]
int ovflow; //number of overflow words
int wl[MAXWORD]; //word length counters
state=OUT;
nc=0; //number of chars in a word
ovflow=0; //nuber of words >=MAXWORD
for(i=0;i<MAXWORD;++i)
wl[i]=0;
while((c=getchar())!=EOF)
{
if(c==' ' || c=='/n' || c=='/t')
{
state=OUT;
if(nc>0)
if(nc<MAXWORD)
++wl[nc];
else
++ovflow;
nc=0;
}else if(state==OUT)
{
state=IN;
nc=1; //beginning of a new word
}else
++nc; //inside a word
}
maxvalue=0;
for(i=1;i<MAXWORD;i++)
if(wl[i]>maxvalue)
maxvalue=wl[i];
for(i=1;i<MAXWORD;++i)
{
printf("%5d-%5d:",i,wl[i]);
if(wl[i]>0)
{
if((len=wl[i]*MAXHIST/maxvalue)<=0)
len=1;
}else
len=0;
while(len>0)
{
putchar('*');
--len;
}
putchar('/n');
}
if(ovflow>0)
printf("There are %d words>=%d/n",ovflow,MAXWORD);
}
空格、换行符或制表符标志着单词的结束。如果有一个单词且它的长度小于允许的单词最大长度,这个程序将对相应的单词长度计数器加1(++wl[nc]).如果单词的长度超出了允许的单词最大长度(nc>=MAXWORD),这个程序将对 变量ovflow加1以记录长度大于或等于MAXWORD的单词的个数。
在读入全部单词之后,程序将找出数组wl中的最大值(maxvalue)。变量len是根据MAXHIST和maxvalue的值计算得出的wl[i]所对应的直方图长度。如果wl[i]大于零,就至少要打印出一个星号。