码迷,mamicode.com
首页 > 其他好文 > 详细

typedef的使用3

时间:2016-03-04 22:36:35      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

#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.

 

 

typedef的使用3

标签:

原文地址:http://www.cnblogs.com/letben/p/5243405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!