C语言
-
函数指针变量调用函数、
-
函数在编译时系统会给函数分配一个入口地址、也称为 函数的指针(地址)、
-
有地址便可定义一个指针变量指向该函数、然后可以通过指针变量调用该函数、
-
函数在执行时会占用一段内存单元、有一个起始地址、有地址就可以用一个指针变量指向一个函数、从而通过指针变量调用、
-
函数名代表函数的的入口地址、
-
函数指针不能指向函数中间的某一条语句、
-
函数指针变量定义——数据类型标识符(*指针变量名)(形参列表);
-
数据类型标识符=函数的返回类型、
-
可以通过函数指针指向不同的函数、来调用不同的函数、
-
函数调用不仅可以通过函数名调用也可以使用函数指针调用、指向函数的指针不能做运算、
-
int max(int a, int b) { if (a > b) return a; return b; } int main() { int c; int (*e)(int a, int b);//定义函数指针变量、 /*注意!!! int *e(int a, int b);这样就成函数声明、括号优先级高、所以变成int* 变成了函数的返回值类型、 可以写成int (*e)(int , int );只保留类型、*/ e = max;//将函数入口地址赋值给e、e和max的地址是不相同的、max不是真正的函数地址、 c =(*e)(19,39);//e地址是真正的函数地址、但打印地址、时、打印的时c的地址、 //c = max(9, 18);//常规函数调用、 printf("c=%d\n", c); }
-
-
把指向函数的指针变量作为函数参数、
-
int max1(int a, int b) { if (a > b) return a; return b; } int max2( int a, int b, int(*c)(int a, int b)//形参就是函数指针、 ) { int d = c(a, b);//调用、函数指针c所指向的函数、 return d; } int main() { int e; e = max2(30, 29,max1); printf("e=%d\n", e); int (*f)(int, int);//定义函数指针变量 f = max1; e = max2(3, 59, max1); printf("e=%d\n", e); }
-
-
返回指针值的函数、
-
int d;//解决5行出现的问题、定义全局变量、这样内存就不会被释放、可以一直使用、 int* a(int b, int c) { int d = b + c; return &d;//!!!有风险、因为d在a函数调用完后会将d的的内存释放、所以、会出现错误、 } int main() { int *e; e = a(4, 8); printf("合是%d\n",*e);
-