C语言学习--指针函数与函数指针
#include<stdio.h> #include<string.h> //指针函数: 是一个函数, 但是这个函数的返回值类型是一个指针 //函数指针: 是一个指针, 这个指针的指向是一个函数
//下面是指针函数 int * fun() { int a = 10;//a 是一个局部变量 int *p; p = &a; return p; } int main() { int *p1 = fun(); printf("%d", *p1); }
//10
#include<stdio.h> #include<string.h> //指针函数: 是一个函数, 但是这个函数的返回值类型是一个指针 //函数指针: 是一个指针, 这个指针的指向是一个函数 void fun1(int a , int b){ printf("a+b = %d", a+b); } //函数指针的定义个数: 函数的返回值类型(*函数指针名)(函数的形参) void (*pfun) (int a , int b);//函数名, 就是函数的首地址 int main(){ pfun = fun1; pfun( 10, 11); // a+b = 21 }
#include<stdio.h> #include<string.h> //指针函数: 是一个函数, 但是这个函数的返回值类型是一个指针 //函数指针: 是一个指针, 这个指针的指向是一个函数 int add (int a , int b){ return a+b; } int sub(int a, int b ){ return a-b; } //指针函数, 类似于python把函数作为形参传给另外一个函数,但是这里的函数新参不需要指定, 在调用的时候指定就可以了 void fun3(int (*pf)(int, int ), int x , int y) { printf ("%d\n", pf(x,y)); } int main(){ fun3(add, 10, 11);// 在调用函数fun3的时候再指定指针函数为add() fun3(sub, 10, 11);//在调用函数fun3的时候再指定函数为sub() }
21
-1
#include<stdio.h> #include<string.h> //指针函数: 是一个函数, 但是这个函数的返回值类型是一个指针 //函数指针: 是一个指针, 这个指针的指向是一个函数 //函数指针取别名 int add (int a , int b){ return a+b; } int sub(int a, int b ){ return a-b; } typedef int (*pf)(int , int);//函数指针取别名, 别名就是他自己, 并且别名可以当做类型去使用 void fun3(pf pf1, int x , int y)//别名pf 可以当做类型去使用, 定义一个pf 类型的变量pf1 { printf ("%d\n", pf1(x,y)); } int main(){ fun3(add, 10, 11);// 在调用函数fun3的时候再指定指针函数为add() fun3(sub, 10, 11);//在调用函数fun3的时候再指定函数为sub() }