gpt4 book ai didi

c - 这两个指针有何不同?

转载 作者:行者123 更新时间:2023-12-02 06:36:22 25 4
gpt4 key购买 nike

我是 C 语言和一般指针的新手。所以我对这两件事的理解是基本的。

我一直在尝试创建一个包含函数指针的结构,没什么特别的。这样做的同时;我注意到这个声明:

int *func()
不起作用。虽然这个确实有效:

int (*func)()

它们有什么区别?是不是因为第一条语句只是一个指向整数的指针。而另一个指针,不知何故,指向一个函数?怎么会这样?

最佳答案

int *func(void)

定义一个名为 func 的函数,它没有参数并返回一个指向整数的指针

int(*func)(void)

定义一个指向没有参数并返回整数的函数的指针

造成这种差异的原因是运算符优先级。括号的优先级高于 *。因此在第一个表达式 int *func() 中,函数括号具有最高的优先级并被首先考虑,因此与符号 func 相关联,以便编译器知道 func 是函数的符号。因此剩下的就是返回。

在第二个实例 int(*func)() 中有一组额外的括号。在第一个括号内,我们看到了 *func。由于括号是最高优先级(从左到右),编译器必须解释此集合的内容... *func 是一个指针。好的,指向什么?向右看,我们看到 () 所以它是一个指向函数的指针。然后向左看返回类型。

希望这是有道理的 :) 也试试 How to interpret complex C/C++ declarations在 CodeProject.com 上。它谈到了一种叫做“左右规则”的东西,它是“......一个允许你解释任何声明......的简单规则......”。这是页面的一半多一点...

也试试 cdecl: C gibberish ↔ English .这是 cdecl 实用程序的一个很好的实现。

enter image description here

关于c - 这两个指针有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17524829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com