我对堆栈增长检测的问题阅读了不同的回应,并且我明白,在现代架构中,堆栈可能会随机增长,可能会在堆外创建,等等。为什么函数调用而不是变量地址用于检测栈的增长方向?
但是,在这个经典的面试问题中,我想了解为什么人使用函数调用而不是比较同一函数中的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
PS:从这个和不同的反应其他线程,似乎问题本身是有缺陷的/不相关的,作为一个面试问题,它可能会重新强制执行错误的假设,除非有人研究了答案!
谢谢!
看到这个答案。我已经详细回答了。 http://stackoverflow.com/a/17083372/1292348 – Megharaj 2013-06-13 09:17:10