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

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晚
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容