#include <stdio.h> #include <string.h> //#define _CRT_SRCURE_NO_WARNING #pragma warning(disable:4996) typedef unsigned int uint; typedef unsigned char byte; struct student { int ID; char *name; int age; }; //这样我们之前写的学生类 就会有一个更像javaBean的名字 Student typedef struct student Student; //回顾我们一个字符串拼接的函数 const char *func1(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; } } typedef const char *Func1 (const char *, const char *); //typedef是类型定义的意思。我们把一个函数定义叫做Func1.这个函数是:是具有两个参数并且返回值是const char* 的,并且这两个参数 都是const char * 类型的。 //这样我们的回调函数就比较好写了 //回调函数还是要多背几遍的。 const char *mybackcall(Func1, const char*, const char *); const char *mybackcall1(const char *func1(const char *, const char *), const char *, const char *); const char *mybackcall2(Func1 *f, const char *s1, const char *s2){ return f(s1, s2); } const char *mybackcall3(const char *(func1(const char *, const char *)), const char *s1, const char *s2){ return func1(s1, s2); } typedef const char *(* Func2) (const char*, const char *); const char * myback(Func2, const char *, const char *); const char * myback1(Func2 f, const char * str1, const char * str2){ return f(str1, str2); } const char * myback3(const char *(*)(const char *, const char *), const char *, const char *); const char * myback2(const char * (*f)(const char *, const char *), const char *str1, const char *str2){ return f(str1, str2); } int main(){ Func2 f1[10]; Func1 *f2[10]; uint a = 23; byte b = 65; printf("a:%d b:%c ", a, b); char *p = func1("hello", "world"); printf("%s ", p); free(p); getchar(); return 0; }