Bra_Hancock
Bra_Hancock
2015-12-05 07:02
采纳率: 29.4%
浏览 1.5k

函数作参数,也可以不写成指针形式?

下面的代码是书上的例子 main调用process再调arr
书上是用函数指针 然后我改了一下 发现不用指针 效果一样
但是网上一般都用指针形式 不用指针有什么弊端?

#include <iostream>
#include <cstdlib>
using namespace std;
#define N 5
/*
void process(int* x, int n,int (*fun)(int*,int))
{
    int result;
    result = (*fun)(x,n);
    cout<<result<<endl;
}
*/
void process(int* x, int n,int fun(int*,int))
{
    int result;
    result = fun(x,n);
    cout<<result<<endl;
}
int arr_max(int x[],int n)
{
    int max=x[0],k;
    for(k=1;k<n;k++)
    {
        if(max<x[k])
            max= x[k];      
    }
    return max;
}
int arr_min(int x[],int n)
{
    int min=x[0],k;
    for(k=1;k<n;k++)
    {
        if(min>x[k])
            min= x[k];
    }
    return min;
}
int main()
{
    int a[N] = {10,25,33,15,27},choice;
    cout<<"Input your choice:";
    cin>>choice;
    switch(choice)
    {
    case 1:cout<<"max = ";
        process(a,N,arr_max);
        break;
    case 2:cout<<"min = ";
        process(a,N,arr_min);
        break;
    }
    system("pause");
    return 0;
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • qq_27183003
    ysuwood 2015-12-05 08:03
    已采纳
     void process(int* x, int n,int (*fun)(int*,int))
     void process(int* x, int n,int fun(int*,int))
    

    作为函数形参,这两种方式是等价的,都是定义了fun函数指针变量,和数组一样:

     int fun(int *x, int n)
     int fun(int x[100],intn)
    

    在形参里定义数组长度没有意义,实质是定义了一个指针变量。

    点赞 评论
  • q3733353520

    函数指针和函数名都是指向函数地址的,
    指针可以改变指向更灵活

    点赞 评论
  • John_ToString
    John_ToString 2015-12-07 01:34

    void process(int* x, int n,int (*fun)(int*,int))
    void process(int* x, int n,int fun(int*,int))
    你哪两种写法本质上是一样的,你第一个是传了一个函数指针类型的变量fun,此时fun指向了你之前定义的函数, 第二个是直接把函数名传了进来、
    函数名本来就存的是函数的入口地址...

    点赞 评论

相关推荐