#include <stdio.h> #include <string.h>//不加还能跑,加上反而跑不了了。。。笑哭 #pragma warning(disable:4996)//要这句跟上面那个包含放在一起。否则会有一个警告阻止编译。 //字符串拷贝函数: const char * myStrcat(const char *,const char *); typedef const char * MYSTRCAT1(const char *,const char *); //这里是定义了一个MYSTRCAT1这种类型的对象,本身是一个函数 typedef const char * (*MYSTRCAT2)(const char *, const char *); //定义了一个指向这种函数的地址 //回调函数: const char * myback(const char * (const char *, const char *), const char *, const char *); const char * myback1(MYSTRCAT1, const char *, const char *); const char * myback2(MYSTRCAT2, const char *, const char *); int main(){ //char *p = myStrcat("hello", " world"); //printf(p); //free(p); /* char *pf = myStrcat; char *p1 = myback(pf, "hello", " world"); printf(p1); free(p1); */ /* MYSTRCAT1 *function = &myStrcat; char *p2 = myback1(function, "hello", " world"); printf(p2); free(p2); */ /* MYSTRCAT2 function2 = myStrcat; char *p3 = myback2(function2, "hello", " world"); printf(p3); free(p3); */ /* MYSTRCAT1 * function1[10]; function1[0] = &myStrcat; char *p4 = myback1(function1[0], "hello", " world"); printf(p4); free(p4); */ MYSTRCAT2 function2[3]; function2[2] = myStrcat; char *p5 = myback2(function2[2], "hello", " world"); printf(p5); free(p5); 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); strcpy(p, str1); strcat(p, str2); return p; } } const char * myback(const char * func(const char *, const char *), const char * str1, const char * str2){ return func(str1, str2); } const char * myback1(MYSTRCAT1 func, const char *str1, const char *str2){ return func(str1, str2); } const char * myback2(MYSTRCAT2 func, const char *str1, const char *str2){ return func(str1, str2); }
什么时候 用typedef 什么时候 使用 #define?
typedef是一种高级数据特性,它能使某一类型创建自己的名字
1、与#define不同,typedef仅限于数据类型,而不是能是表达式或具体的值
2、typedef是编译器处理的,而不是预编译指令
3、typedef比#define更灵活
直接看typedef好像没什么用处,使用BYTE定义一个unsigned char。使用typedef可以增加程序的可移植性。
应用场合:
1、在程序当中如果是定义一个可读的常量,适合用#define
2、如果定义的是一个具体的数据类型,那么typedef更加适合。
3、如果是定义一个函数指针,那么基本就用typedef.