#2
pvm20002023-04-17 07:39
|
例子一:
int x = f()+g();
这里不能假定f()和g()哪个先调用,有的编译器会先调用g()。
例子二:
int i = 1;
a[i] = ++i;
这里不能假定结果是a[1]=2。有的编译器先对子表达式:++i求值,那就是a[2]=2。
例子三:
int s = 5;
int x = (s + 1) * (++s);
这里不能假定结果是x=6*6=36。有的编译器先对子表达式:++s求值,那就是x=7*6=42。
例子四:
int i=1;
int x = i+1==++i ? 1 : 0;
int x = i+1==++i ? 1 : 0;
这里x的值是1还是0,取决于子表达式i+1和++i哪个先求值。要是先对子表达式:++i求值,那x的值是0,要是先对i+1求值,那x的值就是1。
例子五:
int a[] = {1, 2};
int i = 0;
int x = a[i] << ++i;
int i = 0;
int x = a[i] << ++i;
这里x的值是什么?根据先对a[i]求值还是先对++i求值,可能是2,可能是4。
但是,逗号(,)表达式是从左到右求值的。比如:
i=0,i+=1,i*=2;
结果是:
i=2;
[此贴子已经被作者于2023-4-17 07:38编辑过]