我看到了这个警告 怎么办呢?
Temp += (Table[i, temp3] - (MSB[i] ^ 0x1));
警告:逗号表达式的左侧操作数无效
答案 0 :(得分:4)
什么是Table对象?如果它是二维数组,那么你应该写
Table[i][temp3]
在您的代码中
[i, temp3]
是一个逗号运算符 - 它计算第一个参数(i),忽略它并返回temp3,所以如果Table是某种接受单索引访问其对象的容器,你就可以删除i
答案 1 :(得分:2)
逗号运算符从左到右计算任意数量的表达式,并得到最右边的表达式。
您在Table[i, temp3]
中有逗号,与Table[temp3]
完全相同。您是否尝试Table[i][temp3]
访问二维数组中的某个位置?
编辑:我会再解释一下,它可能对您有用。我不会100%准确,它只是让你知道发生了什么。
为什么必须使用两对括号来访问“表格”中的“单元格”?使用一维数组,array[i]
将使您进入数组的第i个元素,对吧?好吧,使用二维数组,让我们像你一样称它为表,table[i]
也会让你进入第i个元素。但是这一次,该元素是另一个数组:表的第i行。
因此,如果table[i]
是表的一行,这只是另一个数组,那么如何访问列j?好吧,你必须转到row[j]
,table[i][j]
。
C中的多维数组是“数组数组”。
答案 2 :(得分:2)
语法错误 - 如果Table
是二维数组,请使用Table[i][temp3]
。
答案 3 :(得分:1)
i, temp3
你是什么意思?如果Table
是2D数组,则使用Table[i][temp3]
访问元素(i,temp3)。
编辑:由于我的速度很慢,可以被多个答案击败,我会添加一些内容,以便我的答案不仅仅是之前的答案:i, temp3
实际意思?嗯,C99标准解释说:
“逗号运算符的左操作数被计算为void表达式;有一个 评估后的序列点。然后评估右操作数;结果有它 类型和值.97)如果尝试修改逗号运算符的结果或 在下一个序列点之后访问它,行为是未定义的。“
所以Table[i, temp3]
的意思是“评估i,然后访问Table
中的元素编号temp3。因此编译器警告你我没有做任何事情(因为评估我没有产生任何一方 - 效果)。