输入deff指针是个好主意吗?我查看了一些代码并发现惯例是将指针类型转换为SomeStruct*成typedef SomeStruct* pSomeStruct;这有什么好处吗?
4 回答
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
当指针本身可以被视为“黑盒子”时,这是适当的,即,其内部表示应该与代码无关的一段数据。
本质上,如果您的代码永远不会取消引用指针,并且您只是将其传递给API函数(有时通过引用),那么不仅typedef减少了*
代码中的s 数量,而且还向程序员建议指针不应该真的被插手了。
如果需要,这也可以在将来更容易地更改API。例如,如果您更改为使用ID而不是指针(反之亦然),现有代码将不会中断,因为指针永远不应该首先被取消引用。
陪伴而非守候
TA贡献1757条经验 获得超8个赞
我在typedef中使用指针的唯一一次是处理指向函数的指针时:
typedef void (*SigCatcher)(int);SigCatcher old = signal(SIGINT, SIG_IGN);
否则,我发现它们比有用更令人困惑。
被删除的声明是指向signal()
函数的指针的正确类型,而不是信号捕获器的指针。SigCatcher
通过编写可以使其更清晰(使用上面更正的类型):
typedef SigCatcher (*SignalFunction)(int, SigCatcher);
或者,声明signal()
函数:
extern SigCatcher signal(int, SigCatcher);
也就是说,a SignalFunction
是一个指向函数的指针,该函数接受两个参数(a int
和a SigCatcher
)并返回a SigCatcher
。而signal()
本身是有两个参数(一个函数int
和一个SigCatcher
)并返回SigCatcher
。
慕哥6287543
TA贡献1831条经验 获得超10个赞
这可以帮助您避免一些错误。例如,在以下代码中:
int* pointer1, pointer2;
pointer2不是int *,它是简单的int。但是对于typedef,这不会发生:
typedef int* pInt;pInt pointer1, pointer2;
他们现在都是int *。
- 4 回答
- 0 关注
- 536 浏览
添加回答
举报
0/150
提交
取消