发布网友 发布时间:2024-10-18 01:58
共1个回答
热心网友 时间:2024-12-01 17:49
error C2106: '=' :left operand must be l-value 表示等号左边必须为一个左值,该处错误为等号左边为*p+i\j是表达式,不是一个左值。
问题分析
C语言的符号优先级表格(部分)如下表:
由该表格可知取值符 * 运算优先级高于加法运算符 +,因此 *p+i 和 *p+j 的运算均为先取值再加上变量,结果为一个数值,无法作为左值被赋值,只能用于赋值或比较故产生了该错误。
解决方法
该设计思路为先计算p+i作为地址再进行取值操作,故此处可以使用括号修改代码,修改结果如下:
此时赋值符 = 左边均为左值即可被赋值的变量或存储空间。故使用赋值符 = 时应对其左边的内容稍加关注,避免此类由于优先级导致的语法错误。
扩展资料
值得注意的是,赋值符正确使用时会附带隐含的类型转换,如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:
1、实型赋予整型,舍去小数部分。此处应注意C语言的舍去一般采用截断舍去,对整数部分不影响。
2、整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分,一般小数部分的值为0,但由于浮点数精度问题可能产生误差。
3、字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。此处实际赋值时与选择的编译器有关,具体编译器需要具体分析。