标签:
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 == ‘\0‘) “递归的第一步:递归的终结条件。” 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 == ‘\0‘) “这里也是,一定要有递归的终结条件” 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("\n"); 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 != ‘\0‘ && *src != ‘\0‘) 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 == ‘\0‘ && *src == ‘\0‘) 64 return 0; 65 if (*dest == ‘\0‘) 66 return -1; 67 if (*src == ‘\0‘) 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\n"); 90 else if (b == 1) 91 printf("dest > src \n"); 92 else 93 printf("dest < src \n"); 94 95 int c = func1(test04); 96 if (c == 0) 97 printf("dest == src\n"); 98 else if (c == 1) 99 printf("dest > src \n"); 100 else 101 printf("dest < src \n"); 102 103 return 0; 104 } 105 "1.这段给我最重要的思想是字符串之间本身是可以加减的,同时也可以自己比较大小。不需要额外引用其他变量。" 106 "2.这段还用了函数回调,即函数指针的使用。"
标签:
原文地址:http://www.cnblogs.com/yyx1-1/p/5738180.html