1 函数执行的时候有自己的临时栈 (c++中函数调用时有两个栈空间,对象的栈空间和函数的栈空间)
2 函数的参数就在临时栈中,如果函数传递实参过去,则用来初始化临时参数变量。
#include <stdio.h>
int add(int a,int b)
{
printf("%d,%d\n",a,b);
return a+b;
}
int main()
{
int (*fun)(int) = (int(*)(int))add;
int r = fun(1);
printf("%d\n",r);
return 0;
}
参数是fun传递的,实际调用的函数是add,在调用函数初始化临时变量时,如果栈中有传参数,则初始化临时变量,若没有,则不初始化。
所以上文中会出现一个很大的值,因为b没有被初始化
但如果
int (*fun)(int) = (int(*)(int))add; 改成 int (*fun)(int,int,int) = (int(*)(int,int,int ))add;
int r = fun(1); 改成 int r = fun(1,2,5);
<