2014-10-04 188 views
-9

我在做C语言的一些任务并遇到了这个错误。这个任务是关于使用二维数组的矩阵。我希望程序在矩阵中向上移动1个槽,如果它到达顶部,即arr [0] [],则移动到同一列的底部,即arr [size-1] []。在这行代码中,当i = 0时,我试图将(size-1)赋给(i-1),但是我得到了“作为赋值左操作数所需的左值”的错误。请提前帮助和感谢。“在C中需要作为赋值左操作数的左值”在C

if (i==0){ 
    i-1 = size-1; 
} 
+3

想一想。给“(i-1)”分配一些东西是没有意义的。 – 2014-10-04 10:03:12

+2

为什么不把'size'分配给'i'? – 2014-10-04 10:07:11

+3

“我试图把(大小1)分配给(i-1)” - 那甚至*意味着什么? – 2014-10-04 10:18:16

回答

0

C标准ISO/IEC 9899:TC2 § 6.5.16/2赋值运算符

赋值操作员有修改的左值作为其左 操作数。

§ 6.3.2.1/1左值,数组和功能指示器

左值是与一个对象类型或不完全型 空隙比其他的表达式;如果左值53)在评估 时未指定对象,则行为未定义。当一个对象被称为 有一个特定的类型时,该类型由用于指定对象的左值指定。可修改的左值是一个左值,它不包含 具有数组类型,不具有不完整类型,不具有 常量限定类型,并且如果它是结构或联合,则不具有 任何成员(包括递归,所有 中的任何成员或元素都包含集合或联合),且为const限定类型。

因为i-1不是一个可指定的东西,左值,你不能分配给它。

+0

@Downvoter我可以问你为什么downvoted? – 4pie0 2014-10-04 18:34:26

+0

非常感谢0d0a。我再次读这个,意识到我有多愚蠢。应该刚刚分配给我的大小。无论如何,很高兴知道我无法为i-1分配价值。 – 2014-10-06 17:33:04

-1

in your expression i-1 = size-1; i-1将产生一个整数,而size-1也会产生一个整数,并且在最后一步,编译器会尝试将一个整数赋值给一个非法的整数,因为在赋值操作符的左侧应该有一个变量内存位置,以便右侧的值可以分配给它。但左侧的整数常量没有任何内存位置,因此显示左值错误。

相关问题