为了账号安全,请及时绑定邮箱和手机立即绑定

输入deff指针是个好主意吗?

输入deff指针是个好主意吗?

C C++
慕田峪4524236 2019-05-27 13:09:28
输入deff指针是个好主意吗?我查看了一些代码并发现惯例是将指针类型转换为SomeStruct*成typedef SomeStruct* pSomeStruct;这有什么好处吗?
查看完整描述

4 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

当指针本身可以被视为“黑盒子”时,这是适当的,即,其内部表示应该与代码无关的一段数据。

本质上,如果您的代码永远不会取消引用指针,并且您只是将其传递给API函数(有时通过引用),那么不仅typedef减少了*代码中的s 数量,而且还向程序员建议指针不应该真的被插手了。

如果需要,这也可以在将来更容易地更改API。例如,如果您更改为使用ID而不是指针(反之亦然),现有代码将不会中断,因为指针永远不应该首先被取消引用。


查看完整回答
反对 回复 2019-05-27
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

不是我的经验。隐藏' *'会使代码难以阅读。


查看完整回答
反对 回复 2019-05-27
?
陪伴而非守候

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


查看完整回答
反对 回复 2019-05-27
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

这可以帮助您避免一些错误。例如,在以下代码中:

int* pointer1, pointer2;

pointer2不是int *,它是简单的int。但是对于typedef,这不会发生:

typedef int* pInt;pInt pointer1, pointer2;

他们现在都是int *


查看完整回答
反对 回复 2019-05-27
  • 4 回答
  • 0 关注
  • 536 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信