typedef的用法

typedef和#define
typedef是重命名的语句,而#define是编译器在编译的时候,将#define定义的关键字来来替换。
比如:

#include <stdio.h>
#define x  5+5
int main(void)
{
    printf("%d\n", x*x);//最后结果为35。没有想象的100。所以我们每一次的使用宏替换的时候都要小心翼翼的去将每个元素用括号括起来。
    return 0;
}

typedef 也可以重命名一个函数的指针,之后可以继续像使用函数一样,将指针指向函数之后,就可以使用函数的功能,再上几次的博客中我们也有指出typedef的函数指针的命名。

#include <stdio.h>
typedef void (*ptr_func)(int);//重命名一个函数的指针
void func(int a)
{
    printf("%d\n", a);  
}
int main(void)
{
    ptr_func p;//声明一个函数的指针
    p = func;//讲指针指向函数
    p(2);//调用函数指针指向函数打印2
    return 0;
}

/*
Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子:

#define dPS struct s *

typedef struct s * tPS;

以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?
这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子:

dPS p1,p2;
tPS p3,p4;

第一个扩展为

struct s * p1, p2;
.
上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3和p4 两个指针。

晦涩的语法
*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值