typedef的使用2
Posted 木鸟飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了typedef的使用2相关的知识,希望对你有一定的参考价值。
#include <stdio.h> #include <string.h> #pragma warning(disable:4996) //闲言碎语都先不要讲了,直接上函数吧。字符串拼接函数 const char *myStrcat(const char *, const char *); //myStrcat的回调函数: const char *myback(const char *(const char*, const char *), const char, const char); //const char *myback(const char *这里最好放一个函数名,要不不好理解(const char*, const char *), const char, const char); //正文:typedef typedef const char *(MYSTRCAT1)(const char *, const char *); //这句话等价于,定义一个函数叫做:MYSTRCAT,要求这个函数的返回值是const char *,并且传入两个参数 都是 const char *. typedef const char *(* MYSTRCAT2)(const char *, const char *); //这句话等价于定义一个函数地址。一个指向【 返回值是const char *,拥有两个参数都是const char *的[函数]】的地址 //所以回调函数myback可以写成: const char *myback1(MYSTRCAT1, const char *, const char *); //以及 const char *myback2(MYSTRCAT2, const char *, const char *); int main(){ //用法一: //char *myString = myStrcat("hello ", "world"); //printf(myString); //free(myString); //用法二: //用法二 打开这是第一行:MYSTRCAT1 *myStrcat1 = &myStrcat; //这个函数真的是写的我一脸懵逼。。。 //解释一下为什么:MYSTRCAT1是一个函数。myStrcat是一个返回了函数的const char * 的函数。 //所以定义一个MYSTRCAT1类型的函数myStrcat1的指针,要他取myStrcat函数的地址。 // 注解第一层:相当于: //int i = 0; //int *p = &i; /* 注解第二层: //再复杂一点相当于: { int i;//等价于:const char *myStrcat(const char *, const char *);声明有这样一个变量 int main(){ int *p = &i; //等价于:MYSTRCAT1 *myStrcat1 = &myStrcat; } i = 0;//定义 等价于: const char *myStrcat(const char * str1, const char * str2){ if (str1 != NULL&&str2 != NULL){ char *p = malloc(strlen(str1) + strlen(str2) + 1);//+1 是为了\0 文件结尾 strcpy(p, str1); strcat(p, str2); return p; } } } */ //用法二 打开这是第二行:char *p = myback1(myStrcat1, "hello", "world"); //用法二 打开这是第三行:printf(p); //用法二 打开这是第四行:free(p); MYSTRCAT2 mystrcat2 = myStrcat;//因为在定义的时候 MYSTRCAT2 本身就是一个指向 myStrcat函数的地址 char *p = myback2(mystrcat2, "hello", "world"); printf(p); free(p); getchar(); return 0; } const char *myStrcat(const char * str1, const char * str2){ if (str1 != NULL&&str2 != NULL){ char *p = malloc(strlen(str1) + strlen(str2) + 1);//+1 是为了\0 文件结尾 strcpy(p, str1); strcat(p, str2); return p; } } //存在正文时,不允许未知名的原型参数,原型参数包括:myStrcat,str1,str2 const char *myback(const char *myStrcat(const char *, const char *), const char *str1, const char *str2){ return myStrcat(str1, str2); } //对应的函数实现: const char *myback1(MYSTRCAT1 functionName, const char *str1, const char *str2){ //这里写的都一样我就蒙蔽了 return functionName(str1, str2); } const char *myback2(MYSTRCAT2 functionName, const char *str1, const char *str2){ //这里写的都一样我就蒙蔽了 return functionName(str1, str2); }
以上是关于typedef的使用2的主要内容,如果未能解决你的问题,请参考以下文章