指向函数的指针做参数

指向函数的指针做参数,第1张

# include<stdioh>

int main()

{

void poess (int a,int b,int (fun)(int,int)); //11111111111111111

int max(int,int); /22222222222222

int h,r;

scanf("%d,%d",&h,&r);

poess(h,r,max);

}

int max(int a,int b) /2222222222222和上面相同

{

return(2ab);

}

void poess (int a,int b,int (fun)(int,int)) //1111111111111111和上面相同

{

int m;

m=(fun)(a,b);

printf("%f",m);

}

帮你改了一下,要不然编译器找不到它要的函数

指针其实就是地址,例如

int

a=3;

int

p=&a;

这时p就是一个指针,它的值就是a在内存中地址,&是取地址的意思,

在函数调用中用了指针作形参,那么调用函数时候实参传递给函数的是参数的地址,函数在执行的过程中会根据这个传过来的地址去对那个变量进行运算。最后会把这个变量的值改变。

用引用也是用地址实现这种传递法。

不用指针变量,则函数在调用时会在内存另外一个地方再开启内存,传递过来的值交给了这个新开启的内存。函数在执行过程中则只对这部分新开启的内存变量 *** 作,结束后不会返回值,

所以,指针变量其实就是通过地址来改变主函数中变量值

看你的需要了,有时不用指针作为参数达不到你要的效果,比如一个swap()函数。

int

swap(int

a,int

b)

{

int

tmp;

tmp=a;

a=b;

b=tmp;

}

如果你想调用该函数交换两个变量的值,在主函数中输出,那是不可能的。比如这样调用:

int

x=1,y=2;

swap(x,y);

printf("%d

%d",x,y);

你认为会输出2

1吗?错!还是会输出1

2的。因为传入swap()函数的只是x,y的拷贝,而不是它们自身。

如果要真正达到交换的目的,就要用指针传值。这样定义函数:

void

swap(int

a,int

b)

{

int

tmp;

tmp=a;

a=b;

b=tmp;

}

但是给函数传值时要注意,指针是指向地址的,所以参数要是地址,即需要给变量取地址。

int

x=1,y=2;

swap(&x,&y);

printf("%d

%d",x,y);

这样就是输出2

1了!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11680915.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存