C++C++函数指针和指针函数

本文参考http://www.prglab.com/cms/pages/c-tutorial/advanced-data/pointers.php

http://blog.csdn.net/ameyume/article/details/8220832

1.函数指针

函数指针是一个指针,其对的凡一个函数,而休是司空见惯的数据类型或者类对象。其定义如下:

int (*func)(int a, int b);     // 声明函数指针

函数指针的无限特别作用是以一个函数作为参数传递给其它一个函数。函数指针的声明和声明一个家常的函数原型差不多,除了函数指针的函数叫做需要被括在括号内,并于函数叫作前续加星号asterisk(*)。这就算证明函数指针函数称是一个指针,上面的函数指针func定义也一个对一个返回值为整型,有一定量个参数并且两单参数还是整型的函数

脚是伸手少独数之跟和差的函数指针用法:

// pointer to functions
#include <iostream.h>
using namespace std;
//求两个数的和
int addition (int a, int b) { 
    return (a+b); 
}

//求两个数的差
int subtraction (int a, int b) { 
    return (a-b);
 }
int (*minus)(int,int) = subtraction; 
int operation (int x, int y, int (*functocall)(int,int)) { 
    int g; 
    g = (*functocall)(x,y); 
    return (g); 
} 

int (*func)(int,int);                //声明函数指针
int main () {
    int m,n;
    /*以函数指针的形式来调用
    func=addition;
    int res=(*func)(7,5);
    func=subtraction;
    int res1=(*func)(20,res); */
    m = operation (7, 5, addition);             //调用求和函数
    n = operation (20, m, minus);             //调用求差函数
    cout <<n; 
    system("pause");
    return 0; 
}     

2.指针函数

指针函数是拉动指针的函数,其真相是一个函数,只是返路凡有平色的指针

夫定义如下:

类型说明符  (*)函数名 (参数列表);
  int       *  func  (int x,int y);

是因为地方的概念可以看,指针函数是一个回去值为地址类型的函数。需要专注的凡:函数的回来值必须由同品种的指针变量来受(也就是说,指针函数一定有所返回值)。其返回回值的用法如下:

char *fun();        //声明一个返回类型为char类型的指针函数
char *p;             //定义一个char类型的指针变量,用来接收fun()的返回值
p=fun();            

指针函数的应用实例:

#include<iostream>
using namespace std;

int * GetDate(int week,int day);            //声明指针函数

int main()
{
    int week,day;
    do{
    cout<<"please enter week(1--5)   day(1--7)"<<endl;
    cin>>week>>day;
    }while(week<1||week>5||day<1||day>7)
    cout<<*GetDate(week,day);                //去引用获得该地址下的元素值
    cout<<endl;
    system("pause");
    return 0;
}

int * GetDate(int week,int day)
{
    static int calendar[5][7]=
    {
        {1,2,3,4,5,6,7},
        {8,9,10,11,12,13,14},
        {15,16,17,18,19,20,21},
        {22,23,24,25,26,27,28},
        {29,30,31,-1}
    };
    return &calendar[week-1][day-1];            //返回指向calendar某个元素的地址
}    

以下例子参考http://blog.csdn.net/ameyume/article/details/8220832,以说明指针函数的使用过程中内存地址的转化

#include<iostream>
using namespace std;
int *f(int a, int b); // 声明指针函数  
int main()
{
    cout << "------------------------------Start\n";
    int *p1 = NULL;
    cout << "The memeory address of p1 = 0x" << p1 << endl;
    p1 = f(1, 2);
    cout << "The memeory address of p1 = 0x" << p1 << endl;
    cout << "*p1 = " << *p1 << endl;
    cout << "------------------------------End\n";
    system("pause");
    return 0;
}
/*
* 指针函数的定义
* 返回值是指针类型int *
*/
int *f(int a, int b) {
    int *p = (int *)malloc(sizeof(int));
    cout << "The memeory address of p = 0x"<<p << endl;
    memset(p, 0, sizeof(int));
    *p = a + b;
    cout << "*p = " << *p << endl;
    return p;
}

运转结果如下:

C++ 1