c语言动态调用函数指针 c语言函数指针调用格式

C语言 函数指针 的调用问题?函数指针 怎么用?最好有例子。。

#includestdio.h

创新互联-专业网站定制、快速模板网站建设、高性价比洛江网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式洛江网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖洛江地区。费用合理售后完善,十余年实体公司更值得信赖。

//定义类型fun_ptr,它是一个函数指针,指向的函数返回值为int,参数为int

typedef int (*fun_ptr)(int);

//fun1

int fun1(int a)

{

printf("call fun1,pram=%d,return %d+1\n", a, a);

return a+1;

}

//fun2

int fun2(int a)

{

printf("call fun2,pram=%d,return %d+2\n", a, a);

return a+2;

}

int main(int argc, char *argv[])

{

int a = 10;

int s = 0;

//定义函数指针类型的变量p_fun

fun_ptr p_fun;

//指向fun1

p_fun = fun1;

//执行

s=p_fun(a);

printf("s=%d\n", s);

//指向fun2

p_fun = fun2;

//执行

s=p_fun(a);

printf("s=%d\n", s);

return 0;

}

执行结果:

C语言中调用函数指针占用哪里的存储空间,被调函数运行时内部变量存在哪里,和直接调用函数有什么区别?

在程序运行时,一个函数占用一段连续的内存。当调用一个函数时,实际上是跳转到函数的入口地址,执行函数体的代码,完成后返回。

函数指针指向一个函数的入口地址,也就是函数存储空间的首地址。

在C语言中,数组名代表数组的首地址,同样函数名代表了函数的首地址,因此在赋值时,直接将函数指针指向函数名就行了。

因此函数指针调用vs直接调用,占用的存储空间都是一样的。相当于数组指针和数组名的关系,指向的都是同一个数组。

局部变量存在函数体里面,比如转换成8086汇编(示意):

func: 定义变量

push ax

pop ax

ret

main: call func

满意请采纳,谢谢!

C语言调用函数指针

并不是不规范的问题,你子程序写法只能在子程序中输出正确的数据,而在主函数中无法得到交换过的x和y的值。参考程序运用指针让子程序去读写a和b的值,在子程序执行完成后,a和b的值确实得到了交换。

你的程序中子程序采用的不是指针类型参数,这样子程序无法将交换过后的值传回来。


网站名称:c语言动态调用函数指针 c语言函数指针调用格式
地址分享:http://myzitong.com/article/ddchiso.html