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

Arl*_*ind 3 c variables increment decrement

我正在阅读Brian W. Kernighan和Dennis M. Ritchie在第46页上的"C编程语言",其中指出"增量和减量运算符只能应用于变量;表达式(i+j)++是非法的".为什么不能在变量之前或之后使用?

AnT*_*AnT 18

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

例如,您可以这样做

int a[10] = { 0 };
++*(a + 5);
Run Code Online (Sandbox Code Playgroud)

*(a + 5)你的理解是"变量"吗?

问题i + j不在于它"不是变量".问题i + j是它不是左值.这就是为什么你不能申请++它.

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