递归、函数回调、字符的思考

1.函数指针类型做什么工作呢(起什么作用)
  1)它规定了函数的"返回值和参数。"只要是这种它所对应的返回值和参数类型的函数,它都可以调用起来。
  2)回调函数是通过函数指针做函数参数实现的,"它的本质是:提前对函数的返回值和参数做了一个约定"

2.数组类型和数组指针指针类型
  1)数组类型
  int arr[10]; arr代表数组首元素地址; &arr代表整个数组首地址。虽然 arr 和 &arr 的值相同,但是他们的步长不同

  2)数组类型
  typedef int (MyArr)[10]; MyArr marr; marr[0] = 10;"数组的首元素赋值为10"

  3)数组指针类型:
  typedef int (*MyTypeArr) [10]; MyTypeArr myarr = &arr;
  (*myrr)[0] = 10; "数组的首元素赋值为10"
  或直接定义数组指针
  int (*MyTypeArr) [10]; (*MyTypeArr)[0] = 20;

3.函数指针:"(函数名就是函数的入口地址)"

  1)定义一个函数类型
  void func(int a,int b){ }

  2)定义一个函数类型
  typedef void (Myfunc)(int a,int b); Myfunc *myfunc = func; 对它的调用 myfunc(4,6);

  3)定义一个函数指针类型
  typedef void (*MyPfunc)(int a,int b); MyPfunc myfunc1 = func; 对它的调用:myfunc1(3,0);
  或者直接定义:void (*MyPfunc1)(int a, int b); MyPfunc1 = func; 对它的调用:mypfunc1(3,0);

  1 6.递归的套路:
  2     1)先判断递归结束条件
  3     2)再调递归函数(传递的参数一般与判断条件相同)。
  4 "顺序打印字符串,用递归思想"
  5 void test(const char *str)
  6 {
  7     if (NULL == str)
  8         return;
  9     if (*str == '')                “递归的第一步:递归的终结条件。”
 10         return;
 11     printf("%c ",*str);                “递归第二步:参数的传递,如下面”
 12     test(str + 1);                    "注意这里要加用 +1, 而不能用++,程序运行中可能会出问题,因为这样指针的指向就已改变"
 13 }
 14 "逆序打印字符串,用递归思想"
 15 void test01(const char *str)
 16 {
 17     if (NULL == str)
 18         return;
 19     if (*str == '')                “这里也是,一定要有递归的终结条件”
 20         return;
 21     test01(str + 1 );                “这里是这个递归函数精妙的地方,要用+1,”
 22     printf("%c ", *str);
 23 }
 24 int main(void)
 25 {
 26     char *str = "nihaoshijie";
 27     test(str);
 28     test01(str);
 29     printf("
");
 30     system("pause");
 31     return 0;
 32 }
 33 
 34 递归函数里 递归语句的前后是一个重要的分割点。
 35 "注意观察这两段代码的不同之处,一段打印代码的放置顺序不同,就造成了字符串的逆序和顺序打印" 36 
 37 7.对 strcmp() 函数的重写 以及 函数回调(函数指针的使用)
 38 typedef int(*camp)();
 39 //老师写的
 40 int test03()
 41 {
 42     char *dest = "Asadws";
 43     char  *src = "Bsadws";
 44     while (*dest != '' && *src != '')
 45     {
 46         if (*dest == *src)
 47         {
 48             dest++;
 49             src++;
 50         }
 51         else
 52             break;
 53     }
 54     return *dest - *src;
 55 }
 56 //自己写的
 57 int test04()
 58 {
 59     char *dest = "Asadws";
 60     char  *src = "Bsadws";
 61     while (1)
 62     {
 63         if (*dest == '' && *src == '')
 64             return 0;
 65         if (*dest == '')
 66             return -1;
 67         if (*src == '')
 68             return 1;
 69         if (*dest > *src)
 70             return 1;
 71         if (*dest < *src)
 72              return  -1;
 73         if (*dest == *src)
 74         {
 75             src++;
 76             dest++;
 77         }
 78     }    
 79 }
 80 int func1(camp c1)
 81 {
 82     int n= c1();
 83     return n;
 84 }
 85 int main(void)
 86 {
 87     int b = func1(test03);
 88     if (b == 0)
 89     printf("dest == src
");
 90     else if (b == 1)
 91     printf("dest > src 
");
 92     else
 93     printf("dest < src 
");
 94 
 95     int c = func1(test04);
 96     if (c == 0)
 97         printf("dest == src
");
 98     else if (c == 1)
 99         printf("dest > src 
");
100     else
101         printf("dest < src 
");
102 
103     return 0;
104 }
105 "1.这段给我最重要的思想是字符串之间本身是可以加减的,同时也可以自己比较大小。不需要额外引用其他变量。"
106 "2.这段还用了函数回调,即函数指针的使用。"
原文地址:https://www.cnblogs.com/yyx1-1/p/5738180.html