我看到了关于检测堆栈增长的不同回答,我了解到在现代架构中,堆栈可能会随机增长,可能会在堆上创建等等。
然而,在这个经典的面试问题中,我想要理解为什么人们使用函数调用而不是比较同一函数中的2个本地变量。我认为肯定有某些特殊的原因,但作为一个非C/低级开发者[Java :)],我只是猜测。
这是我尝试过的代码:
void sub (int *a) {
int b;
int c;
printf ("a:%d\n", a);
printf ("b:%d\n", &b);
printf ("c:%d\n", &c);
if (&b > a) {
printf ("Stack grows up.\n");
} else {
printf ("Stack grows down.\n");
}
}
int main (void) {
int a;
int b;
sub (&a);
printf ("\nHere we go again!!\n");
if (&b > &a) {
printf ("Stack grows up.\n");
} else {
printf ("Stack grows down.\n");
}
return 0;
}
我还找到了一篇文章,试图优化这个解决方案,但我也不理解:http://www.devx.com/tips/Tip/37412 另外,在不同的回复和其他主题中,似乎问题本身是错误/不相关的。作为面试问题,除非有人调查答案,否则它可能会强化错误的假设!
谢谢!