0x0040140d <main+90>: movl $0x7,0x4(%esp)
0x00401415 <main+98>: lea -0x48(%ebp),%eax
0x00401418 <main+101>: mov %eax,(%esp)
0x0040141b <main+104>: call 0x4012f0 <foo>
0x00401420 <main+109>: fldl 0x404090
0x00401426 <main+115>: fstpl 0x14(%esp)
0x0040142a <main+119>: fldl 0x4040a0
0x00401430 <main+125>: fstpl 0xc(%esp)
0x00401434 <main+129>: fstpl 0x4(%esp)
0x00401438 <main+133>: movl $0x403007,(%esp)
0x0040143f <main+140>: call 0x4019c0 <printf>
可以看到汇编里面是 先调用了 foo
然后
0x404090 入栈
0x4040a0 入栈
一直到调用printf
从这个运行截图可以看到
0x404090 是min的地址
0x4040a0 是max的地址
printf("%f %f %f\n", foo(arr, sizeof arr/sizeof *arr), max, min);
这里的入栈顺序是从右向左的
但函数foo会在函数入栈之前调用
而在你的编译器中 入栈顺序是从右向左的
但函数调用会在 min max入栈之后
这就是我为什么说输出什么无法确定
函数调用有可能发生在min max入栈之前
也有可能发生在min max入栈之后
另一个问题
本来就可以直接定义
书里面没说吗? |