C++函数指针与指针函数有哪些关系和区别

目录1.函数指针1.1概念定义1.2声明方法1.3调用方法1.4函数指针作为函数参数1.5函数指针数组2.指针函数2.1概念定义2.2调用方法3.总结1.函数指针1.1概念定义...

1. 函数指针

1.1 概念定义

函数指针是指向函数的指针变量。 因此函数指针本质上是一个指针变量,只不过该指针变量指向函数。指针变量也可以指向整型变量、字符型、数组,也可以指向函数。

C语言中,每一个函数都有一个入口地址,函数指针就指向函数的入口地址,可以通过函数指针来调用函数。

value: 8

maxval = fun(max,x,y)将函数max的入口地址传给了fun的形参pfun,调用pfun实际就调用了函数max。

1.5 函数指针数组

函数指针数组是一个元素均为函数指针的数组。

#include <stdio.h>
//返回两个数中较大的一个
int max(int a, int b){
    return a>b ? a : b;
}
//返回两个数中较小的一个
int min(int a, int b){
    return a<b ? a : b;
}
int main(){
    int x, y, maxval, minval;
    int(*arr[2])(int x, int y) = { max, min};
    printf("Input two numbers:");
    scanf("%d %d", &x, &y);
    maxval = arr[0](x,y);
    printf("Max value: %d\n", maxval);
    minval = arr[1](x,y);
    printf("Min value: %d\n", minval);
    return 0;
}

运行结果:

Input two numbers:5 8
Max value: 8
Min value: 5

int(*arr[2])(int x, int y) = { max, min}定义的是一个指针函数数组,数组两个元素分别为函数max和函数min的地址,调用数组arr元素实际就调用了对应函数,这一点始终没变。

2. 指针函数

2.1 概念定义

指针函数是非常常见的,它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有“函数返回值”,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。

例如: int *fun(x,y); 其结构为 类型标识符 函数名(参数)

fun是一个函数,只是返回值是一个int型的指针,如果不加,它依然是一个函数,只是返回值是一个int整型数。

2.2 调用方法

#include <stdio.h>
//返回两个数中较大的一个
int *max(int *a, int *b){
    int *ptr;
    ptr = *a>*b ? a : b;
    return ptr;
}
int main(){
    int x, y, *maxval;
    printf("Input two numbers:");
    scanf("%d %d", &x, &y);
    maxval = max(&x,&y);
    printf("Max value: %d\n", *maxval);
    return 0;
}

运行结果:

Input two numbers:5 8
Max value: 8

int *max(int *a, int *b)为指针函数,它与普通整型函数或字符型函数并没很大区别,只是函数返回为指针ptr。

3. 总结

指针函数本质是一个函数,其返回值为指针。

函数指针本质是一个指针,其指向一个函数。

指针函数:int* fun(int x,int y);

函数指针:int (*fun)(int x,int y);

*与函数名在括号内,表明指针作用于函数本身,*与函数名不在括号内,表明指针作用于函数返回值。

到此这篇关于C++函数指针与指针函数有哪些关系和区别的文章就介绍到这了,更多相关C++函数指针内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题为:C++函数指针与指针函数有哪些关系和区别

基础教程推荐