嵌入式Day14--函数指针与指针函数
1.指针函数函数的返回值是指针类型char *strcpy(char *dst, const char *src); strcpy 这个函数的返回值就是一个指针。 成功指针就指向dst。需要注意的是不能返回是局部作用域的指针。希望函数可以连续调用。即在同一个语句里面实现strcpy(str1,strcpy(str3,str2));希望返回一段内存区域 (数组堆空间)。2.函数指针前面介绍的指针基本都是指向数据。函数指针指向一个函数。本质是指针变量函数名其实是地址值。里面储存的代码是对数据进行加减乘除操作的。目的避免代码的重复方便后期代码的扩展以及函数功能的解耦合。回调函数一个函数被当作参数传递给另外一个函数。被传递的这个参数(函数指针回调函数)被动调用。主调函数只是传参(函数)。语法 int add(int a, int b) // int (*) (int,int) { return a b; } int main(int argc, char **argv) { int (*p)(int, int) add; // p 函数指针。 add 不能写成add(), 不是对add函数的调用 int a 10; int b 20; int ret 0; ret add(a, b); printf(add() is %d\n, ret); ret p(a, b); // 通过函数指针 对函数的调用 printf(p() is %d\n, ret); return 0; }int div3(int num) // div3 - int (*) (int) { return 0 num %3; } int div5(int num) // div3 - int (*) (int) { return 0 num %5; } // int (*fun) (int) 函数指针 void find_num(int* a,int size, int (*fun) (int) ) { for(size_t i0;isize;i) { if( fun(a[i])) // if( div5(a[i])) { printf(%d\n,a[i]); } } } int main(int argc, char **argv) { int a[10]{0}; fill_array(a,10); //find_num3(a,10); find_num(a,10,div5); // 传递函数名给 find_num return 0; }3.typedef关键字作用取别名给数据类型取别名3.1普通数据类型取别名typedef 老数据类型名 新数据类型名 typedef unsigned char u8; typedef unsigned short u16; typedef char s8; int main(int argc, char **argv) { u8 a; // unsigned char u16 b; // unsigned short s8 c; // char return 0; }3.2简化函数指针的写法PFUN 是一个类型名 typedef int* (*PFUN)(int ,int ,char* ); // int* func(int a,int b ,char* c) // int* (*)(int ,int ,char* ) // { // return NULL; // } // int func2(int a,int b, int* (*pfun)(int ,int ,char* )) // { // return 0; // } int* func(int a,int b ,char* c) // int* (*)(int ,int ,char* ) { return NULL; } int func2(int a,int b, PFUN pfun) // int a; { char str[]{0}; pfun(1,2,str); return 0; }