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;
}

运行结果如下:

时间: 2024-12-05 12:29:18

C++函数指针和指针函数的相关文章

c指针 --笔记2返回指针值的函数

返回指针值的函数 一般带回指针值的函数,定义形式为: int *a (int x, int y); 看这个经典案例: #include <stdio.h> int main(int argc, char const *argv[]) { double score[][4] = {{60.0, 70.0, 80.5, 20.1}, {60.0, 70.0, 80.5, 21.1}, {60.0, 70.0, 80.5, 22.1}}; double *search(double(*pointer

深入浅出剖析C语言函数指针与回调函数(二)

上一篇博文的地址: http://blog.csdn.net/morixinguan/article/details/65494239 这节,我们来看看函数指针与回调函数在Linux内核中的应用. 从上节我们了解到,函数指针和回调函数在开发者和用户之间的一个例子,那么这节,我将引用Linux内核中文件操作结构体来详细的说明. 我们首先来看到这个结构体,这段代码位于linux内核的include/linux/fs.h中,由于代码众多,我只截取几个最基本的例子: File_operations文件操

数组指针、指针数组、函数指针、指针函数 -----笔记

1.数组的四种访问方式 定义数组 a[]; 指针 *p 指向数组a; (1) 利用数组的下表进行访问 a[i]; (2) 数组名+地址的偏移量i *(a+i) (3) 利用指针 p 进行下表访问 p[i] (4) 指针p + 地址的偏移量i *(p+i) 一维数组数组名:相当于一个单指针 2. 数组指针(指针)     指针数组(数组) 函数指针(指针)     指针函数(函数)    -------->只看后边两个字就能够区分是指针还是数组或函数 _______________________

C言语指针变量作为函数参数

在C言语中,函数的参数不只可所以整数.小数.字符等详细的数据,还可所以指向它们的指针.用指针变量作函数参数可以将函数内部的地址传递到函数外部,使得在函数外部可以操作函数内部的数据,而且这些数据不会跟着函数的完毕而被烧毁.像数组.字符串.静态分派的内存等多是一系列数据的聚集,没有方法经过一个参数全体传入函数外部,只能传递它们的指针,在函数外部经过指针来影响这些数据聚集.有的时分,关于整数.小数.字符等根本类型数据的操作也必需要借助指针,一个典型的例子就是交流两个变量的值.有些初学者能够会运用下面的

函数指针和指针函数

(1)函数指针 函数指针就是指向函数的指针变量,即本质是一个指针变量. int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 指向函数的指针包含了函数的地址,可以通过它来调用函数.声明格式如下:        类型说明符 (*函数名)(参数) (2)指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y);

函数指针与回调函数

一.函数指针 1.  函数指针就是一个指针变量,用来指向函数地址.正在运行的程序(进程)在内存中占据一定的空间.进程包括编译好的程序代码和需要使用的变量.因此,程序代码中的函数就是一些字符域,要得到一个函数地址,也就是得到这些字符域的起始地址. 2. 函数指针的三种形式:    指向普通C函数的函数指针 --- C语言中的函数指针    指向C++类静态成员函数的函数指针 --- C++    指向C++类非静态成员函数的函数指针 --- C++ 函数指针的本质自然也就是函数地址.  类成员函数

函数指针和回调函数

函数指针 函数指针是指向函数调用地址的指针.它和函数名究竟有什么关系呢?且看下文. 且看一小程序 首先,先请看下边程序: 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 void func(string s) 6 { 7 cout << s << endl; 8 } 9 10 void (*pFunc)(string s); // 不能够写成 void *pFunc(s

深入理解 [指针函数] 、[函数指针]、[指针的指针]、[指向指针数组的指针]

指针函数 1.指针函数是指带指针的函数,即本质是一个函数.当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中. 函数返回类型是某一类型的指针: 格式: 类型标识符  *函数名(参数表) int *match(void *key_x,void *key_y); 解析:首先来说它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针

善于指针---使用返回指针值的函数(续)

综合举个例子来说明一下,使用返回指针值的函数,也可以理解为利用指针传递内存. 在返回指针时,除可以返回动态内存外,还可以返回静态存储区.但是不能利用指针传递桟内存,因为桟内存函数结束时也消失了,返回的会是一些垃圾内容,无效. 基础内容见:善于指针---使用返回指针值的函数 //在返回指针时,除可以返回动态内存外,还可以返回静态存储区 #include<iostream> #include<string> using namespace std; //利用指针传值 char *Tes

函数指针与指针函数返回值的区别

指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针定义: 类型标识符 *函数名(参数表)eg: int *f(x,y);函数指针是指向函数的指针变量,即本质是一个指针变量.int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 函数指针与指针函数返回值的区别,码迷,mamicode.com