回复 楼主 蓝天碧水__
网上的一个回答,反正我是看不懂的,对不对就更不知道了!!!
问: 举个简单的例子,比如:
main(){
printf("%d\n");
}
每个人应该会输出的不同,我的意思是问这个值有什么意义?
我的输出的结果是1245120
对于大家的回答,我也觉得可能是前一条指令的地址,那么对于这个特定的函数,是main()函数的地址么?(由于本人并非学C的,所以IDE的调试工具不太会用,又方便看的能不能逐行执行下,看看输出的到底是什么的值)
答:根据__cdecl调用(C语言的默认调用方式),函数参数从右往左入栈,从高地址往低地址入栈。因为你写的printf(),参数个数不足,函数往下读参数时读到的可能是前一条指令的地址。比如你的就是1245120,即上一条指令的执行地址。前一条指令要看堆栈是怎么压入的,这个需要学的很深的编译原理才可能弄懂,再说前一条指令指的是汇编的前一条指令,内容不可预测性很大。