嗯,我想知道编译器“读取”代码的顺序。例如:
假设我有以下代码片段:
int N, M;
N = M = 0;
在这种情况下,编译器会为N和M分别分配一部分内存(int、4个字节),然后在第二行(引发我的疑问的位置),有两种可能:
1. 编译器“读取”N等于M并且都等于零。
2. 编译器“读取”零,将其放入M的内存中,然后获取M的值,即零,并将其放入N的内存中。
换句话说,是从右到左还是从左到右?我不知道我的疑问是否变得清晰了,但在我做的一个测试中:
int i=0; /*I declared the variable i, and assign zero value to it*/
printf("%d", i++); /*Prints 0*/
printf("%d", i); /*Prints 1*/
我理解上面的代码,在第二行,编译器似乎(从我理解的角度)从左到右“读取”,将i的值赋给类型%d,并在打印后递增变量i,因为在第三行它被打印为1。
下面的代码片段反转了++的位置:
int i=0; /*I declared i variable to zero*/
printf("%d", ++i); /*Prints 1*/
printf("%d", i); /*Prints 1*/
在这种情况下,在第二行中(我所理解的),编译器从左到右“阅读”,当编译器读取将要打印的内容时(逗号后留下的内容,这个空间的名称是什么?) ,首先“阅读”++并将该变量在以下情况下增加,即i,然后将%d分配给要打印的内容。
顺序是,编译器“阅读”的顺序是什么?我有些老师告诉我编译器从分号(;)的右边到左边“阅读”,但实际上编译器有一定的顺序吗?如果我上面说的话有错,请纠正我。 (我的英语不是很好)
谢谢!
N=M=0;
这样的语句如何被解释。赋值运算符从右到左进行分组,也就是说,这个语句被解释为N=(M=0);
。 - dyp