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

一、指针函数

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和f赋值给的指针p1的地址是相同的

二、函数指针

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容