函数指针与指针函数 C语言

指针函数与函数指针(C语言)

1.指针函数

int *f(int a,int b); //返回值为int *,指针类型的返回值

上面的函数声明又可以写成如下形式:

int* f(int a,int b);

让指针标志*与int紧贴在一起,而与函数名f间隔开,这样看起来比较明了,f是函数名,返回值类型是一个int类型的指针.

指针函数就是返回一个地址给调用者.

例1:

// 001.c
#include <stdio.h>
int *f(int a, int b); // 声明指针函数  

int main()  
{  
    printf("------------------------------ Start\n");  

    int *p1 = NULL;  
    printf("The memeory address of p1 = 0x%x \n", p1);  

    p1 = f(1, 2);  

    printf("The memeory address of p1 = 0x%x \n", p1);  
    printf("*p1 = %d \n", *p1);  

    printf("------------------------------ End\n");  
    getchar();  
    return 0;  
}  

int *f(int a, int b) 
{  
    int *p = (int *)malloc(sizeof(int));  
    printf("The memeory address of p = 0x%x \n", p);  
    memset(p, 0, sizeof(int));  
    *p = a + b;  
    printf("*p = %d \n", *p);  

    return p;  
} 

指针函数f返回的类型是一个指针类型,并且指针函数f的返回值p和赋值给的指针p1的地址是相同的.


2.函数指针

函数指针说的就是一个指针,但是这个执照很指向的是函数,不是普通的基本数据类型或者类对象.

int (*f)(int a,int b);//声明函数指针
//该函数指针f是一个指向返回值为整型,有两个参数并且两个参数的类型都是整型的函数

函数指针与指针函数的最大区别是: 函数指针的函数名是一个指针,即函数名前面有一个指针类型的标志符号* 函数指针的返回值也可以是指针.

例2:

// 002.c
// 求2个整数的较大值和较小值
#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 (*f)(int, int); // 声明函数指针,该指针指向返回值类型为int,有两个参数类型都是int的函数  

int main()  
{  
    printf("------------------------------ Start\n");  

    f = max;    // 函数指针f指向求较大值的函数max  
    int c = (*f)(1, 2);  
    printf("The max value is %d \n", c);  

    f = min;    // 函数指针f指向求最小值的函数min  
    c = (*f)(1, 2);  
    printf("The min value is %d \n", c);  

    printf("------------------------------ End\n");  
    getchar();  
    return 0;  
} 

updatedupdated2020-04-142020-04-14