指针函数与函数指针

来源:互联网 发布:围巾 知乎 编辑:程序博客网 时间:2024/06/10 11:24

指针和地址

指针存储的是变量的内存地址。指针是有类型的,地址是没有类型的。

简单的说指针是有类型的地址。

地址告诉你内存地址从哪里开始,类型告诉你内存地址到哪里结束。

指针函数

返回指针的函数

声明形式

int *f(int a, int b);int* f(int a, int b);

f是函数名,返回值是一个int型的指针。
函数指针就是返回一个地址给调用者。

指针函数使用示例:

int *f(int a, int b); // 声明指针函数int _tmain(int argc, _TCHAR* argv[]){    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 * */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;}

函数指针

指向函数的指针

声明形式

int (*f) (int a, int b);

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

根据上面的函数指针声明,这个函数指针指向的是一个含有两个int类型参数并且返回int类型的函数。

书写特点:函数指针的函数名是一个指针形式。

函数指针使用示例:

/* * 求最大值 * 返回值是int类型,返回两个整数中较大的一个 */int max(int a, int b) {    return a > b ? a : b;}/* * 求最小值 * 返回值是int类型,返回两个整数中较小的一个 */int min(int a, int b) {    return a < b ? a : b;}int (*f)(int, int); // 声明函数指针,指向返回值类型为int,有两个参数类型都是int的函数int _tmain(int argc, _TCHAR* argv[]){    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;}

参考

  • 指针函数与函数指针
原创粉丝点击