美文网首页
指针之 函数指针和指针函数

指针之 函数指针和指针函数

作者: SeatonLv | 来源:发表于2019-07-20 16:14 被阅读0次


指针函数

定义

指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针

声明格式为:*类型标识符 函数名(参数表)

这似乎并不难理解,再进一步描述一下。

看看下面这个函数声明:

int fun(int x,int y);

这种函数应该都很熟悉,其实就是一个函数,然后返回值是一个 int 类型,是一个数值。

接着看下面这个函数声明:

int *fun(int x,int y);

这和上面那个函数唯一的区别就是在函数名前面多了一个*号,而这个函数就是一个指针函数。其返回值是一个 int 类型的指针,是一个地址。

这样描述应该很容易理解了,所谓的指针函数也没什么特别的,和普通函数对比不过就是其返回了一个指针(即地址值)而已。

指针函数的写法

int *fun(int x,int y);

int * fun(int x,int y);

int* fun(int x,int y);

这个写法看个人习惯,其实如果*靠近返回值类型的话可能更容易理解其定义。

#include <iostream>

using namespace std;

int *GetNum(int x); //指针函数声明形式

void main(void)

{

    cout << "===============start================" << endl;

    int num;

    cout << "Please enter the number between 0 and 6: ";

    cin >> num;

    cout << "result is:" << *GetNum(num) << endl;    //输出返回地址块中的值

    system("pause");

}

int *GetNum(int x) {

    static int num[] = { 0,1,2,3,4,5,6 };

    return &num[x];  //返回一个地址

}

函数指针

定义

函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针

类似C#的委托

声明格式:类型说明符 (*函数名) (参数)

如下:

int (*fun)(int x,int y);

函数指针是需要把一个函数的地址赋值给它,有两种写法:

fun = &Function;

fun = Function;

取地址运算符&不是必需的,因为一个函数标识符就表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。

调用函数指针的方式也有两种:

x = (*fun)();

x = fun();

int add(int a, int b)

{

    return a + b;

}

    int max(int a, int b)

{

    return a > b ? a : b;

}

int main03()

{

//void *p(int, char *);//声明了一个函数,函数的名字叫p,函数的返回值是void *,函数的参数是int和char *

//void (*p)(int, char *);//定义了一个指向参数为int和char*,返回值为void的函数指针

//定义一个参数为int * 返回值为int *的指向函数的指针

//int *(*p)(int *);

//int *p(int *);//声明了一个函数,返回值是int *,参数是int *

//void (*p1)(int *, int);

int(*p)(int, int);//定义了一个指向函数的指针,可以指向两个参数,都是int,返回值也是int这种类型的函数

int status = 0;

scanf("%d", &status);

//p = add;//直接写函数的名字,代表函数的地址,将add这个函数的地址复制给指针变量p

if (status == 1)

p = max;

else

p = add;

int i = 0;

i = p(5, 7);//通过指针变量间接的调用指针指向的函数

//编译在编译i = p(5,7)的时候,根本就不知道要调用什么代码

printf("i = %d\n", i);

}

示例2:

int func1(int(*p)(int, int), int a, int b)//第一个参数是指向函数的指针

{

return p(a, b);//通过指向函数的指针调用一个函数

}

int main00()

{

int i = func1(add, 6, 9);//add函数在这里就叫回调函数

printf("i = %d\n", i);

return 0;

}

相关文章

  • C:函数指针的坑

    关于该死的函数指针和指针函数 先来个目录 常量指针、指针常量 数组指针、指针数组 函数指针、指针函数 1、先看第一...

  • 指针之 函数指针和指针函数

    指针函数 定义 指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。 声明...

  • C++:函数指针 & 返回函数指针的函数

    函数指针 & 返回函数指针的函数 一、函数指针的声明和使用 声明一个函数指针,给它赋值并调用它指向的函数 函数指针...

  • 函数和指针

    函数指针: 指向函数的指针(是指针)指针函数:返回值是指针的函数(是函数)

  • 函数指针

    概念: 指针函数, 函数指针, 指针数组, 数组指针, 指向数组的指针, 指向函数指针数组的指针。

  • 指针函数,函数指针,和位运算

    1.函数指针和指针函数的区别 函数指针是指向函数的指针变量,即本质是一个指针变量 指针函数可用于将一个函数作为参数...

  • 指针

    一. 指针指向的是对象的地址//函数指针:指针指向函数//指针函数:函数返回指针 二.

  • 指针

    指针 数组指针和指针数组 函数指针和指针函数 指针作为参数 指针多用于处理值传递,减少值复制耗费的内存

  • C语言

    C 指针、指针变量、函数指针、指针函数、指针数组、数组指针、C 数组

  • Redis

    1.指针函数与函数指针 指针函数本质是指针,其返回值是指针。如 float *fun(); 函数指针,本质是指针。...

网友评论

      本文标题:指针之 函数指针和指针函数

      本文链接:https://www.haomeiwen.com/subject/dljulctx.html