------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
这段不能运行,程序报错为:此行b=&m;'=' : cannot convert from 'int *' to 'int,意思是指针类型的值(地址)不赋予整型变量,也就是说变量b不是int*指针类型,而是int类型,DEintp没有把变量b定义为int*,而是定义成为了int,但是变量a却成功定义,所以:
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的区别。