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

问题描述

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

下面的代码是书上的例子 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

c++-函数作参数,也可以不写成指针形式?的相关文章

adc-stm32的ADC中可以把函数里面的具体的ADC写成ADC_TypeDef* ADCx的形式吗

问题描述 stm32的ADC中可以把函数里面的具体的ADC写成ADC_TypeDef* ADCx的形式吗 解决方案 STM32 ADC[菜鸟入门]stm32 之 ADC 模数转换stm32adc多通道数据采集

这个代码 在加一列写成视图形式怎么写呀

问题描述 这个代码 在加一列写成视图形式怎么写呀 SELECT CONVERT(NVARCHAR, RH.REQ_ID) + '-' + CONVERT(NVARCHAR, EEO.EXP_TYPE) + CONVERT(NVARCHAR, EEO.CURRENCY_TYPE) + '-S' AS ID, RH.REQ_ID, EEO.EXP_TYPE,EEO.ISHAVEBREAKFAST, EEO.CURRENCY_TYPE, SUM(EEO.EXP_PRICE) AS EXP_PRICE,

[总结]C语言二维数组作为函数的参数

前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: 1 #include <cstdio> 2 void print(int *a[3]) 3 { 4 printf("%d\n",a[0][0]); 5 } 6 7 int main() 8 { 9 int a[2][3] = {1,2,3,4,5,6}; 10 print(a); 11 return 0

C语言二维数组作为函数的参数

前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include <cstdio> void print(int *a[3]) { printf("%d\n",a[0][0]); } int main() { int a[2][3] = {1,2,3,4,5,6}; print(a); return 0; } 编译程序时候,在第10行提示错误信息:|

以一个链表指针作参数传入一个函数里,若此时链表为空,则初始化链表,为什么在主函数中不能用?

问题描述 以一个链表指针作参数传入一个函数里,若此时链表为空,则初始化链表,为什么在主函数中不能用? #include using namespace std; typedef struct Node { int age; struct Node* next; }LIST; void addList1(LIST* pHead,int x)//链表结尾加节点 { LIST* pM=new LIST();//新节点 pM->age=x; pM->next=NULL; if(pHead==NULL)

数组作参数,怎样才能不准修改数组

问题描述 数组作参数的时候,默认是引用传递,也就是说函数可以修改数组里的值.我不希望函数修改数组里的值应该怎么写?voidfn(int[]consta)voidfn(constint[]a)我试这两种写法都不行,我想声明参数为不能修改,应该怎么写? 解决方案 解决方案二:在函数里面自己复制下参数数组的值就行了解决方案三:这段代码你运行下,看看结果是什么:protectedvoidPage_Load(objectsender,EventArgse){int[]n=newint[3]{1,2,3};

Python open()函数文件打开、读、写基础操作

说明:         python的文件读写和打开操作都有自己特定的函数和方法,操作起来很简单.下面就来简单的了解下python文件的文件基本操作方法有哪些. 一.Python open()函数文件打开操作     打开文件会用到open函数,标准的python打开文件语法如下: 1 open(name[,mode[,buffering]])     open函数的文件名是必须的,而模式和缓冲参数都是可选的.比如说有个a.txt的文本文件,存放在c:\text下,那么你要打开它可以这样操作:

main函数的参数(一)

C程序最大的特点就是所有的程序都是用函数来装配的.main()称之为主函数,是所有程序运行的入口.其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用的是有参函数,则参数在调用时传递.main(){...y1=f1(x1,x2);...}f1(int a,int b){....Y2=f2(x3,x4);....}f2(int m,int n){.........}在前面课程的学习中,对main()函数始终作为主调函数处理,也就是说,允许main()调用其它函数并传递参数.事

Excel函数的参数

函数右边括号中的部分称为参数,假如一个函数可以使用多个参数,那么参数与参数之间使用半角逗号进行分隔. 参数可以是常量(数字和文本).逻辑值(例如TRUE或FALSE).数组.错误值(例如#N/A)或单元格引用(例如E1:H1),甚至可以是另一个或几个函数等.参数的类型和位置必须满足函数语法的要求,否则将返回错误信息. (1)常量 常量是直接输入到单元格或公式中的数字或文本,或由名称所代表的数字或文本值,例如数字"2890.56".日期"2003-8-19"和文本&q