makecontext 函数中的指针澄清

发布于 2024-12-11 05:41:16 字数 363 浏览 0 评论 0原文

作为我作业的一部分,我一直在实现一个用户线程库。 我不明白 makecontext 函数:

makecontext(&(mainthread->threadctx),(void(*)(void))start_funct,1,args)

(void(*)(void))start_funct 到底是什么意思?为什么我必须这样写? 我不能把它写成

makecontext(&(mainthread->threadctx),start_funct,1,args) ?

请耐心等待,我还不太适应指针:)

I have been implementing a user threads library as part of my assignment.
I didn't understand the makecontext function:

makecontext(&(mainthread->threadctx),(void(*)(void))start_funct,1,args)

What does (void(*)(void))start_funct exactly mean? And why do I have to write it this way?
Can't I just write it as

makecontext(&(mainthread->threadctx),start_funct,1,args) ?

Please be patient with me, I am not yet comfortable with pointers :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

葬﹪忆之殇 2024-12-18 05:41:16

void(*)(void) 表示“指向不带参数并返回 void 的函数的指针”。

因此 (void(*)(void))start_funct 正在将 start_funct (我们可以假设是某种函数指针)` 转换为上述类型。 (有一个非常有用的在线工具 这可以帮助您,直到您更轻松地阅读声明)。

你必须这样写,因为 start_funct 的签名不是 void start_funct(void),所以需要强制转换。

void(*)(void) means "pointer to a function that takes no parameters and returns void".

Therefore (void(*)(void))start_funct is casting start_funct (which we can assume is some kind of function pointer)` to the above type. (There is a very useful online tool that can help you with this until you get more comfortable reading declarations).

You have to write it this way because the signature of start_funct is not void start_funct(void), so casting is required.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文