typedef中的指针

关于typedef和define在程序运行中的作用。


例:

#define a int

typedef int a;


define是展开,纯展开。不是调用。如例,int就像一只悬挂在a上面的一块石头,就随时准备着,你说需要的时候,它就“啪”的一声掉下来,把原本定义的名字砸在下面。展现出原本的自己。别的它不管不问了,融入代码的海洋中了。(所以切记int后面不要加“;”)

而typedef是重定义,比如,将int 重定义一种名字,也可以这样理解,在C语言中,就好像有两个表示整形的关键字了,一个是int,一个是a。(当然我知道这是不允许的)它成为了一种已存在的类型。


一。

在typedef中使用指针往往会带来意外的结果。 

如:
typedef string* pstring; 
const    pstring cstr; 
请问cstr变量是什么类型?? 
简单的回答是const pstring类型的指针。进一步问:const pstring指针所表示的真实类型是什么? 
很多人都认为真正的类型是: const string* cstr; 
也就是说,const pstring是一种指针,指向的string类型的const对象,但这是错误的。 
错误的原因在于将typedef当作文本扩展了。声明const pstring时,const修饰的是pstring类型,这是一个指针。因此,该声明语句应该是把cstr定义为指向string类型对象的const指针,这个定义等价为: string* const cstr;


二。

而define中使用指针。

不赞成用define定义,但是如果遇到了其实也很好解决。

define是在程序预处理过程中就展开的。

#define pstring string* 

const pstring cstr;

在读代码的时候,只需要将其展开即可:const string* cstr;

由此cstr为常量指针。



在C语言中,使用 `typedef` 可以为复杂的函数指针类型定义一个更简洁、可读性更强的别名。这不仅简化了函数指针的声明过程,还提升了代码的可维护性和可读性。 ### 基本语法 通过 `typedef` 定义函数指针的基本语法如下: ```c typedef 返回类型 (*函数指针类型名称)(参数类型列表); ``` 该语句定义了一个新的类型名称,用于表示某一类具有相同返回值和参数类型的函数指针。 例如,定义一个指向“返回 `int` 类型并接受两个 `int` 类型参数”的函数指针类型: ```c typedef int (*AddFuncPtr)(int, int); ``` 此时,`AddFuncPtr` 成为了一个新的类型名称,可以直接用来声明变量: ```c AddFuncPtr func1, func2; ``` 上述代码等价于以下复杂形式: ```c int (*func1)(int, int); int (*func2)(int, int); ``` ### 示例说明 假设有一个函数 `add`,其功能是计算两个整数之和: ```c int add(int a, int b) { return a + b; } ``` 通过 `typedef` 定义的 `AddFuncPtr` 类型可以声明一个函数指针,并将其指向 `add` 函数: ```c AddFuncPtr ptr = add; // 使用函数名初始化指针 int result = ptr(2, 3); // 通过指针调用函数,输出 5 ``` ### 应用场景 `typedef` 定义的函数指针常用于以下场景: - **回调函数**:将函数作为参数传递给其他模块或库函数。 - **函数指针数组**:实现状态机或命令分发机制。 - **任务调度**:如 FreeRTOS 中的任务函数入口点定义。 示例:FreeRTOS 中定义任务函数的方式: ```c typedef void (*TaskFunction_t)(void *); ``` 此语句定义了一个返回 `void` 类型且接受 `void*` 类型指针的函数指针类型,可以指向无返回值但接收任意参数的函数 [^4]。 ### 其他常见定义方式 除了直接定义函数指针类型外,还可以先定义函数类型再定义指针类型: ```c typedef void FUNC_TYPE(int, char); // 定义函数类型 FUNC_TYPE *pFunc = func; // 声明函数指针并赋值 ``` 或者直接定义函数指针类型: ```c typedef void (*FUNC_TYPE2)(int, char); // 定义函数指针类型 FUNC_TYPE2 pFunc2 = func; // 声明函数指针并赋值 ``` ### 总结 通过 `typedef`,可以显著提高函数指针的可读性和可维护性,使代码更加简洁明了。这种方法尤其适用于需要频繁使用函数指针的场景,如嵌入式系统开发或大型软件架构设计 [^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值