如何在C中找到堆栈正向或反向进展?这项工作?
int j = 0;
int k = 0;
if (&k > &j)
printf ("Stack is growing in forward direction");
else if (&k < &j)
printf ("Stack is growing in reverse direction");
Run Code Online (Sandbox Code Playgroud)
ike*_*ami 13
为了可靠,人们必须找到两个函数调用之间的区别.
void func(int *p) {
int i;
if (!p)
func(&i);
else if (p < &i)
printf("Stack grows upward\n");
else
printf("Stack grows downward\n");
}
func(NULL);
Run Code Online (Sandbox Code Playgroud)
请注意,这不会给出关于C的答案,而是关于编译器的答案.
你不能.在您的代码中,(&k > &j)调用未定义的行为行为.除非指针指向同一数组中的对象(或超出数组末尾的一个对象),否则不会定义与关系运算符的指针比较.
堆栈是否存在取决于您的实现.未定义的行为无法预测实现细节.
ISO C标准甚至没有提到"堆栈"一词.堆栈可能甚至不存在.函数调用用于保存局部变量的内存可能甚至不是连续的.