define和typedef的区别?以及typedef struct 与struct的区别

1. define

define 一般用于宏命令,在编译前,由预处理器做替代,如同文本编辑的替代命令,把程序中的所有遇到的词,全部替代。

如:
‘define unsigned char UINT8’
就是把所有的词 UINT8 替换成 unsigned char ,替换完毕再编译。

2. typedef

typedef是定义一种类型的别名,而不是简单的宏替换。它有好几个不同的作用。第一个作用就是与define的不同之处:
(1)typedef int* PINT; //是定义一个指向int的指针类型,由编译器在编译过程中编译处里,一般采用大写的形式。
int* x; 和 PINT x; 两者的声明是等价的

typedef  int* PINT;
long int* x;   //声明是可以的,但
long PINT x ; //不可以,。

define PINT int*;
long int* x;  //声明是可以的,
long PINT x;  //也是可以的。

从上两种情况对比,你就知道两者的区别: 可以把typedef定义的类型看作一种新的数据类型,而不是简单的替换。

3. typedef struct 与struct的区别

在C语言中,一般我们在声明一个struct数据类型的时候,会带上’struct’这个关键词。

如:
struct tagPOINT1
{
  int x;
  int y;
}; // 定义一个struct数据类型, struct +tagPOINT1一起构成了这个数据结构
  struct tagPOINT1 p1; //声明一个变量时,必须带上struct
  
又如:
typedef struct tagPOINT
{
  int x;
  int y;
}POINT; //同样也是定义了一个struct的数据类型,这个数据结构的名字是:POINT
POINT p1; //声明变量是就可以直接写POINT 而不用加struct
struct tagPOINT p1; //这样也是可以的

typedef struct
{
  int x;
  int y;
}POINT;
POINT p1;

在C++中,如果用typedef的话,又会造成区别:

struct Student
{
  int a;
}stu1; //stu1是一个变量

typedef struct Student2
{
  int a;
}stu2; //stu2是一个结构体类型=struct Student

使用时可以直接访问stu1.a
但是stu2则必须先 stu2 s2;
然后 s2.a=10;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值