C语言函数调用时参数压栈的顺序以及函数指针的作用
1、函数参数压栈的顺序
很多人都知道压栈的顺序时从右向左进行压栈,具体的可观测的结果如下程序运行。有没有人知道C语言为什么要进行这样的参数压栈顺序的选择啊?求指教啊……
#include
int Add1(int a, int b)
{
printf("Add1\n");
return a+b;
}
int Add2(int a, int b)
{
printf("Add2\n");
return a+b;
}
int Add3(int a, int b)
{
printf("Add3\n");
return a+b;
}
int Func(int a, int b, int c)
{
return a+b+c;
}
int main()
{
int ans = Func(Add1(1,2),Add2(2,3),Add3(3,4));
return 0;
}
运行结果如下图所示:
2、函数指针的使用
函数指针,顾名思义,就是指向一个函数的指针,通常来说,函数名就是一个函数指针。
下面我来展示一个程序来表示函数指针的使用,理解函数指针的用法和作用。该函数的功能就是输入命令实现加减乘除,但是是用函数指针的方式来实现,具体见代码。
#include
typedef double (*FUNCP)(double, double);
double Add(double a, double b)
{
return a+b;
}
double Sub(double a, double b)
{
return a-b;
}
double Mul(double a, double b)
{
return a*b;
}
double Div(double a, double b)
{
return a/b;
}
FUNCP func[10];
char cmd[10][10];
int Find(char *op, int L)
{
int i;
for(i=0; i
{
if(strcmp(op, cmd[i])==0)
return i;
}
return -1;
}
int main()
{
func[0] = Add;
strcpy(cmd[0], "Add");
func[1] = Sub;
strcpy(cmd[1], "Sub");
func[2] = Mul;
strcpy(cmd[2], "Mul");
func[3] = Div;
strcpy(cmd[3], "Div");
double a,b;
char op[10];
while(scanf("%s",op)!=EOF)
{
scanf("%lf%lf",&a,&b);
int opId = Find(op,4);
printf("%s %.2lf %.2lf = %.2lf\n",op, a, b, func[opId](a, b));
}
return 0;
}
程序运行结果:
函数指针最大的用处便是用于回调函数,通过定义一类函数类型的函数指针,然后将该类型的函数指针作为另外一个函数的参数,在这个函数内使用传进去的函数指针调用该指针指向的函数,实现相应的功能。
2楼liutengteng1303小时前应该是图片格式不对,没显示,加油哈。1楼han_yankun20096小时前图形有些没显示