浅谈typedef和#define

一、#define
1、#define 是宏定义,它只是无意义的字符替代;
        书写格式: #define PI 3.14(不能加分号,否则会无条件替代 PI就会被替代成3.14;)
2、#define 这个在.c到.i文件时,就会被处理,也就是在预处理的时候就会进行字符替换
3、比如:定义数组的大小
#define size 10
只要出现了size就用10 替换

二、typedef
1、typedef则是类型定义,它代表的是这种类型;
          书写格式:typedef      int     a;(它的后面要加分号,它是完整意义的一行代码)   
 

2、减少错误

     有时候直接定义可能会达不到我们想要的效果,从而引起了错误

     1、char* a, b; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针 和一个字符变量; 
char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,
// 和一个字符变量;


     2、typedef char*  P;  
          P a, b;   
typedef char* PCHAR;
PCHAR pa, pb;  

3、方便

     在c中,我们会用到结构体这个关键字,在定义结构体的时候,我们老是需要带上结构体这个关键字,其实有点麻烦,我们可以利用typedef省事。

     typedef struct A

{

        char a;

        int * b;

}A,*P

struct tagPOINT1
 {
    int x;
    int y; 
};
struct tagPOINT1 p1;
A aa;//代表定义了一个A类型的结构体aa;
P pp;//代表定义了一个指向struct A 的指针
typedef struct tagPOINT
{
    int x;
    int y;
}POINT;


  typedef long double REAL; 
  typedef double REAL; 
  typedef float REAL; 
  char line[81];
  char text[81]; 
  typedef char Line[81]; 
  Line text, secondline;
  getline(text); 
  typedef char * pstr;
  int mystrcmp(pstr, pstr);
  int mystrcmp(const pstr, const pstr); 
  typedef const char* pstr;
void (*b[10]) (void (*)());
typedef void (*pFunParam)();
typedef void (*pFunx)(pFunParam);
pFunx b[10];
doube(*)() (*e)[9];
typedef double(*pFuny)();
typedef pFuny (*pFunParamy)[9];

4、更加好理解

pFunParamy e;
理解这个的关键在于,括号优先级最高,我们可以遵循从右往左的的阅读顺序,也就是有括号先跳到括号,括号出来之后先看右边,再看左边的原则
     (1)  int (*func)(int *p);  
 首先,先看第一个括号(*fun)它是一个指针看,再看它的右边,又是一个括号,表示fun是一个函数指针,这个函数的参数是int *,返回值是int;
int (*func)(int *p);

(2)  int (*func[5])(int *);  

int (*func[5])(int *);

首先,fun是一个数组,因为[]的优先级比*要高一些,然后数组里的元素是指针,然后指针指向的是一个函数看,函数的参数是int*,返回值是int类型;

  typedef register int FAST_COUNTER; // 错误

三、两者区别示例:#define  int*

                                              #typedef  int*  b;
          则 a  c,d=int *c, int *d;
                      e,f =int *e,int f;( 这个只是无意义的字符替代);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值