我读到了对检测堆栈增长检测问题的不同回答,我了解到,在现代架构中,堆栈可能会随机增长,可能会在堆外创建,等等。
然而,在这个经典的面试问题中,我想明白why人们使用函数调用而不是比较同一函数中的两个局部变量。我认为这样做一定有一些特殊的原因,但我不是 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 http://www.devx.com/tips/Tip/37412
P.S:从对此主题和其他主题的不同反应来看,问题本身似乎是有缺陷/无关紧要的,作为一个面试问题,它可能会重新强化错误的假设,除非有人研究答案!
Thanks!
您无法完全控制编译器选择分配局部变量的顺序。但是,您可以合理地控制将调用的函数以及调用顺序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)