【发布时间】:2013-06-18 12:42:08
【问题描述】:
无论我阅读多少主题,我都无法理解评估策略。你能举个例子给我解释一下这三个评估顺序吗?我在下面写一个代码。您能否使用下面的代码解释按需要调用(惰性评估)、按名称调用(正常顺序评估)、按引用调用。你也可以用你的例子来解释它们。我只想了解他们,但我就是无法了解。
int a[4] = {10,20,30,40};
int i = 0;
int *p;
void test(int x, int y, int z)
{
p = (int *)malloc(sizeof(int));
*p=x;
x++; y++; z++;
p = &z;
printf("%d %d %d\n",x,y,z);
x++; y++; z++;
p = &z;
printf("%d %d %d\n",x,y,z);
}
main()
{
test(i,a[0],a[i]);
printf("%d %d %d %d %d\n", a[0],a[1],a[2],a[3],*p);
}
提前致谢。
}
【问题讨论】:
-
我认为这些概念在 C 语言中没有作用,在 C 语言中,评估总是“正常”的,并且评估顺序问题只出现在具有副作用的语句中。我看到的最接近的是按值或按引用/指针调用函数之间的区别。 ...另一方面,如果你想要的只是对每一行代码的详细解释,我可以做到。
标签: c lazy-evaluation operator-precedence evaluation-strategy