为什么我们可以取消引用函数指针

Why can we dereference a function pointer?

本文关键字:引用 函数 指针 取消 我们 为什么      更新时间:2023-10-16

很明显,正如您所知,我是指针的新手。我来自Java,没有指针。

我仍然不明白为什么我们可以取消引用函数指针?我们可以取消引用int指针,因为我们知道int是4字节,但我们不能取消引用void指针,因为不知道它的长度。对于函数指针,虽然我们知道函数的返回值和参数的数据类型(长度),但我们不知道函数在文本中的长度,那么我们如何知道函数的长度,以便解引用它呢?

指针相当于一张纸,上面用盲文写着街道地址。

当你取消引用它时,你会把它交给一个盲人,他会走到这个地方。这个盲人不知道那里是否有坑、房子、河流或商场,除非你告诉他们:告诉他们是指针的类型

几乎所有地址的长度都相同。

当你知道一个指针指向一个int时,你就是在告诉盲人在那个地址期待一个int。所以他们走到那里,与那里的任何东西互动,就好像它是int一样。

当你知道指针是函数指针,并且你取消引用它并调用它时,盲人不需要知道函数有多大:他们只需要知道它从哪里开始。功能有点像游乐园的游乐设施——你上了它们,然后在某个时候它们会把你踢开。几乎总是在你上的地方把你踢掉,口袋里掉出来的东西会让你更轻,还带着你游乐设施的纪念品照片(退货价值)。(具体细节将取决于呼叫约定)

现在,功能的特征很重要——它告诉你乘坐的乘客希望带什么。返回值类型很重要,因为它告诉你带什么形状的盒子作为你骑行的纪念品。但函数的确切大小并不重要。

当然,我们可以继续讨论成员函数指针、远近指针、引用和其他更深奥的东西。

好问题。我以前也有同样的问题。函数点的大小与任何其他指针的大小相同。唯一的区别是函数指针指向内存的文本部分。每次调用方法时,计算机都会取消引用作为方法名称的函数指针。

在抽象中,"取消引用"指针意味着将其转换回所指向的对象。对于具体类型,对象的大小是相关的,但这是由类型本身决定的,而不是由指针决定的。当你调用一个函数时,调用代码当然不需要知道这个函数有多大,所以当你取消引用一个函数指针时,你也不需要知道。