黑马程序员——C语言日志——typedef的使用以及和#define的区别

本文介绍了C语言中typedef的使用,它用于为数据类型创建别名,简化如`volatile unsigned int`等复杂类型名的书写。在结构体和数组类型定义中,typedef也发挥了简化作用。此外,还讨论了typedef与预处理器指令#define在用法上的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


typedef主要作用就是给数据类型的关键字起一个别名,以方便记忆或者简化一些较复杂的类型名字。


(1)我们有一个程序,程序中需要经常定义 volatile unsigned int类型的变量,那么为了简单起见,我们可以事先利用 typedef关键字简化volatile unsigned int,如下:

typedef   volatile unsigned int    vo_usint;
简化为vo_usint(这个简化只是想说明我的意思,实际运用中可根据具体情况简化为更有可读性的名字)

(2)接下来再看一个我们比较常见的typedef在结构体中的运用。

我们先定义一个结构体:

 struct Student 
   {
	   char *name;
	   int number;             
   };
然后我们定义一个此结构体类型的变量PrimaryS:

第一种方法:使用结构体名直接定义

struct Student PrimaryS;   //使用结构体名直接定义
第二种方法:用typedef给结构体名换个名字,然后用新的结构体名定义

typedef struct Student SST;   //起个别名
SST PrimaryS;                //用新名直接定义
第三种方法:和第二种方法类似起个别名,不过是在定义结构体的时候直接起名

typedef struct Student
   {
      char *name;
	  int number; 

   }SST;
    SST PrimaryS;        //用新名直接定义变量
第三种方法是我们见过的用的最多的一种。

(3)typedef还可以定义数组类型,比如我们要定义三个数组a[10],b[10],c[10],我们通俗的定义方法为:

int a[10],b[10],c[10];
使用typedef定义数组类型array[10],然后再定义a[10],b[10],c[10];

typedef int ayyay[10];    //定义数组类型名
  array a,b,c;            //定义数组a[10],b[10],c[10]
(4)typedef和#define的区别这里只做一个简单的举例,就能明白二者区别,至于#define的具体用法可参考上一篇博客http://blog.youkuaiyun.com/hongjitong2/article/details/48766847

下面举例说明typedef和#define的区别:

#include"stdio.h"
#include"stdlib.h" 
#define   DEintp               int*
typedef   char*               TYcharp; //注意:此处结束有“;”
void main()
{  int m=7;
   char ch='H';
   DEintp a,b;              //定义int*类型的a,b           
   TYcharp c,d;             //定义char*类型的c,d
   a=&m;                    //将m,ch的地址赋予abcd
   b=&m;
   c=&ch;
   d=&ch; 
   printf("%d,%d,%c,%c\n",*a,*b,*c,*d);           //打印 
    system("pause") ;             //DOS窗口停留  
}

这段不能运行,程序报错为:此行b=&m;'=' : cannot convert from 'int *' to 'int,意思是指针类型的值(地址)不赋予整型变量,也就是说变量b不是int*指针类型,而是int类型,DEintp没有把变量b定义为int*,而是定义成为了int,但是变量a却成功定义,所以:

 DEintp a,b;              //等价于:int *a,b;或者int*a;int b;<span style="font-family: Arial, Helvetica, sans-serif;">         </span>
   TYcharp c,d;             //而这一句等价于:char* c;char* d;
好现在我们了解了tyedef和#define的区别。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值