2 monamourxxk MonAmourXXK 于 2014.12.08 23:13 提问

C语言,基础理解,请老师,朋友留步。

error C2105: '++' needs l-value

这个错误对于 char p[10]; ++p; 出现这个错误我能理解明白;

但是,对于下面这个:
++(x+1);
同样出现:error C2105: '++' needs l-value;
学生就不明白了,希望有老师或者C语言基础理解好的朋友讲解一下;百度未查到此类情况;

                                                    新来的没悬赏;

7个回答

keybord_dancer
keybord_dancer   2014.12.09 00:57
已采纳

char p[10],p里面存储的就是这个长度为10的数组的第一个元素的地址,并且p上面存储的地址是不能改变的,所以++p不对。下一个,++(x+1)显然不对,++后面是不能跟表达式的

MonAmourXXK
MonAmourXXK ++(x+1)显然不对,++后面是不能跟表达式的 这应该是我想要的结果, 谢谢,
3 年多之前 回复
MonAmourXXK
MonAmourXXK ++(x+1)显然不对,++后面是不能跟表达式的 这应该是我想要的结果, 谢谢,
3 年多之前 回复
SharlNagu
SharlNagu   2014.12.09 00:01

++后面不能跟表达式,(x+1)属于表达式的一种

MonAmourXXK
MonAmourXXK ++后面不能跟表达式,(x+1)属于表达式的一种 这个应该是我要的结果,谢谢。
3 年多之前 回复
MonAmourXXK
MonAmourXXK ++后面不能跟表达式,(x+1)属于表达式的一种 这个应该是我要的结果,谢谢。
3 年多之前 回复
91program
91program   Ds   Rxr 2014.12.09 07:35

你将 ++Y 理解成:Y=Y+1 后,就可以理解你上面的那句为什么不行!
++(x+1),展开后为:(x+1) = (x+1) + 1,看看被赋值的,不是一个能接受被赋值的变量吧

firniel
firniel 回复MonAmourXXK: 表达式返回的是个立即数吧,立即数不能做左值,91的解释也对。你说的“++后面是不能跟表达式的”是个结论,这个结论的原因可以按91的理解
3 年多之前 回复
MonAmourXXK
MonAmourXXK 我觉得不应该这么理解 , 应该是楼下的 【++(x+1)显然不对,++后面是不能跟表达式的】 ,如果X+1可以,那么加上括号,等于前面加上一个N=X+1; 再将++(x+1);改为++N是一个道理,而前者错,后者对。
3 年多之前 回复
ryhbgs
ryhbgs   2014.12.09 07:41

个人认为:
x+1结果应该是常量,常量再++,是不可以的。
本人也是菜鸟,错了别见怪。

MonAmourXXK
MonAmourXXK 楼下有解释, 【++(x+1)显然不对,++后面是不能跟表达式的】这个是我接受的。
3 年多之前 回复
MonAmourXXK
MonAmourXXK 没事。
3 年多之前 回复
yaojun333
yaojun333   2014.12.09 08:52

91program 的解释很好
你了解了“++”在C语言的运算过程。就能明白。推荐你看看《C陷阱与缺陷》

yaojun333
yaojun333 回复MonAmourXXK: 可以这样理解
3 年多之前 回复
MonAmourXXK
MonAmourXXK 请问《C陷阱与缺陷》 是参考书?
3 年多之前 回复
eagleyan
eagleyan   Rxr 2014.12.09 08:57

lvalue 左值,可以放在赋值左边,必须是变量或者数组某一项

http://baike.baidu.com/view/836474.htm

MonAmourXXK
MonAmourXXK 谢谢。
3 年多之前 回复
yuyue2200
yuyue2200   2014.12.09 10:45

char p[10];
你可以理解为: char * const p;

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!