首先,有一个小问题:
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 = 0x7ffefbf931f4b = 0x7ffefbf931f0p = 0x7ffefbf931f0max = 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;}11111112222222a + b = 300另外,函数指针返回值,也可以是指针。
新闻热点
疑难解答