您的位置:首页 > 编程语言 > C语言/C++

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

2017-03-05 17:38 316 查看
首先,有一个小问题:

int *ptr(int)
int (*ptr)(int)


如果你了解这两种用法的含义,并且能够熟练运用这两种指针用法,那么这篇文章对你来说并没有多少参考价值。

一、指针函数:

指针函数的基本形式是

类型说明符 * 函数名(参数)
如:
int *ptr(int)
int *Max(int a, int b);


指针函数较为更好理解,其实就是一个返回值为地址的函数而已。由于返回值为地址,所以类型说明符一把都是int。而且,调用指针函数是,接收返回值的必须是同类型的指针变量。

看看这一段代码,应该可以加深理解:

#include <stdio.h>

int *max(int *num1, int *num2)
{
return (*num1 > *num2 ? num1 : num2);
}

int main(int argc, char const* argv[])
{
int a = 100;
int b = 200;
printf("a = %p\n", &a);
printf("b = %p\n", &b);

int *p = max(&a,&b);
printf("p = %p\n", p);
printf("max = %d\n", *p);
return 0;
}


a = 0x7ffefbf931f4
b = 0x7ffefbf931f0
p = 0x7ffefbf931f0
max = 200


上面这个程序中,指针函数的返回值是最大数的地址,这个返回值在程序中是被指针变量p接收。

在编程过程中,当遇到需要地址的情况,可以考虑使用指针函数。

二、函数指针:

函数指针相比指针函数,更加灵活,基本形式是:

类型说明符 (*变量名)(参数)
如:
int (*ptr)(int)
void (*ptr)();


指针函数和函数指针,看似只有一个括号的差别,然而实则差别很大。函数指针首先它是个指针,而指针函数本质上是个函数。

指针变量,通常使用中,我们常常用来指向数组,字符串等,但指针同时也可以指向函数。在程序编译过程中,每个函数会的得到一个入口地址,指向这个函数地址的指针,就被称为函数指针。

#include <stdio.h>

void (*ptr_1)();
int (*ptr_2)(int,int);

void print_1()
{
printf("1111111\n");
}

void print_2()
{
printf("2222222\n");
}

int sum(int num1,int num2)
{
return num1 + num2;
}

int main(int argc, char const* argv[])
{
int a = 100;
int b = 200;
int result = 0;

ptr_1 = print_1;
(*ptr_1)();

ptr_1 = print_2;
(*ptr_1)();

ptr_2 = sum;
result = (*ptr_2)(a,b);
printf("a + b = %d\n", result);
return 0;
}


1111111
2222222
a + b = 300


另外,函数指针返回值,也可以是指针。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 指针