C 语言怎么打印函数的调用堆栈

Python017

C 语言怎么打印函数的调用堆栈,第1张

可以直接用输出在函数内部调用时,把调用顺序打印出来。 一、一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

刚才我也没想明白,看到了dripple11的回答,再去想了一下,现在想明白了。他的回答是正确的。

又回头看了一下,发现,lz没有完全搞懂。

顺便鄙视一下whatplay的回答,是个傻X。

printf函数,正如第一个人所说,调用函数printf前先要将形参压栈,这时候要计算*p

所以,第一条printf语句已经把参数算出来并放到栈顶保存了。然后调用printf函数(函数调用需要用到栈建立访问连和控制链,而,原来的函数f执行完了,原本f是在栈顶的,所以,函数f的栈空间释放。数组空间也被释放),printf占用了栈,所以,把原来函数f的栈空间内容修改了。所以,第一条printf语句是可以得到结果的。后面因为arr空间的内容已经被修改,所以,之后的printf语句都得不到结果。

顺便再解释一下printf("%s\n",p)得到的为什么是乱码。

正如上面所说,先计算参数p的值保存栈顶。保存的值为arr的地址。然后调用printf函数,把栈顶空间内容修改了。虽然保存了地址,但是原来的内容已经修改了,所以得不到结果。

whataplay,我只是鄙视你的回答,没有骂你。因为你的回答是答非所问!