美文网首页C语言
C语言中一些关于typedef的归纳

C语言中一些关于typedef的归纳

作者: 没想好昵称呵 | 来源:发表于2017-09-09 23:21 被阅读124次

    typedef 的一般使用

    • typedef允许你为各种数据类型定义新名字。

    typedef 如何声明

    • typedef声明的写法和普通的声明基本相同,只是把typedef这个关键字出现在声明的前面。
    • 例如:
        typedef char *ptr_to_char;
        ptr_to_char a;
        char b = 'm';
        a = &b;
        printf("%c\n",*a);//输出m
    

    这个声明把ptr_to_char作为指向字符的指针类型的新名字,声明a是一个指向字符的指针。

    • 这样声明的好处:使用typedef声明类型可以减少使声明变得冗长的危险。

    Attention

    • 你应该使用typedef而不是#define来创建新的类型名,因为后者无法正确地处理指针类型。
    • 例如:
       #define d_ptr_to-char char *
      
       d_ptr_to_char a,b;
       char c = 'l';
       a = &c;
       b = 'h';
       printf("%c\n",*a);//输出l
       printf("%c\n",b);//输出h
    

    正确地声明了a,但是b却被声明为一个字符。在定义更为复杂的类型名时,如果函数指针或指向数组的指针,使用typedef更为合适。

    typedef 在结构体中的使用

    • 我们首先来看一个typedef与struct结合使用的例子:
        typedef struct TagNode
        {
            int age;
            char name[20];
            char *address;
            struct TagNode *next;
        }Node,*pNode;
    
    • 上面的代码实际完成了两个操作:
    • 1.定义了一个新的结构体类型
        struct TagNode
        {
            int age;
            char name[20];
            char *address;
            struct TagNode *next;
        }
    
    • 其中TagNode称为"Tag",即标签,实际上是一个临时名字,struct关键字和TagNode一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。我们可以用struct TagNode来定义变量,但要注意,使用TagNode来定义变量是不对的,因为struct和TagNode合在一起才能表示一个结构类型。
    • 2.typedef为这个结构起了新的名字,叫Node和*pNode。因此,我们可以直接使用Node来定义该结构体类型变量,使用pNode来定义指向该结构体类型的指针变量。
    • 例如:
        typedef struct TagNode
        {
            int age;
            char name[20];
            char *address;
            struct TagNode *next;
        }Node,*pNode;
        int main()
        {
            Node lhk = {19,"Robert"};
            pNode p;
            lhk.address = (char*)malloc(80);//表示查找可用连续80个字节内存的空间赋给address存储地址。
            p = &lhk;//后续引用结构体成员时,以(*p).age形式引用。
            ...
        }
    
    • 归纳于2017.9.9.23.08晚

    相关文章

      网友评论

        本文标题:C语言中一些关于typedef的归纳

        本文链接:https://www.haomeiwen.com/subject/fraajxtx.html