为什么++和 - 仅在变量之前和之后使用?

时间:2015-08-07 05:34:26

标签: c variables increment decrement

我正在阅读Brian W. Kernighan和Dennis M. Ritchie在第46页上的“C编程语言”,其中指出“递增和递减运算符只能应用于变量;表达式如{{1}是非法的“。为什么不能在变量之前或之后使用呢?

3 个答案:

答案 0 :(得分:18)

我不确定你的意思是“仅在变量之前”。运算符++--(后缀和前缀)都需要可修改的左值作为操作数。左值不一定用立即变量名表示。

例如,你可以这样做

int a[10] = { 0 };
++*(a + 5);

您的理解中*(a + 5)是“变量”吗?

i + j的问题不在于它“不是变量”。 i + j的问题在于它不是左值。这就是为什么你不能将++应用于它。

在C语言中,术语“变量”有时被用作术语“可修改的[标量]对象”的半非正式同义词,后者又与术语“可修改的左值[标量类型]”同义。你所指的那本书可能在半非正式的意义上使用了“变量”一词。从这个意义上说,*(a + 5)也是一个“变量”。

答案 1 :(得分:3)

你能做8 ++吗?

操作数必须具有算术或指针数据类型,并且必须引用可修改的数据对象。

答案 2 :(得分:2)

因为(i + j)是添加两个变量的结果,所以你没有实际存储i + j的变量它只是一个计算结果,所以它就像说,让我们一样假设i = 1,并且j = 2,i + j等于3,并且3 ++无效,因为3是r值。有关详细信息,请转到http://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c