问题描述
- 函数作参数,也可以不写成指针形式?
-
下面的代码是书上的例子 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; }
解决方案
函数指针和函数名都是指向函数地址的,
指针可以改变指向更灵活
解决方案二:
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)
在形参里定义数组长度没有意义,实质是定义了一个指针变量。
解决方案三:
函数的参数是指针
解决方案四:
void process(int* x, int n,int (*fun)(int*,int))
void process(int* x, int n,int fun(int*,int))
你哪两种写法本质上是一样的,你第一个是传了一个函数指针类型的变量fun,此时fun指向了你之前定义的函数, 第二个是直接把函数名传了进来、
函数名本来就存的是函数的入口地址...
时间: 2024-09-05 00:03:54