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

时间:2014-02-27 02:58:35

标签: c++ c pointers

显然你可以说,我是新手。我来自Java,没有任何指针。

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

3 个答案:

答案 0 :(得分:18)

指针相当于一张纸上写有街道地址的纸张。

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

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

当您知道指针指向int时,您告诉盲人期望该地址int。所以他们走到那里并与那里的任何东西互动,好像它是int

当你知道一个指针是一个函数指针,并且你取消引用它并将其称为时,盲人并不需要知道函数有多大:他们只需要知道开始的地方。功能有点像游乐园游乐设施 - 你接触它们,然后在某些时候他们会把你踢掉。几乎总是他们会把你从你所在的地方踢开,从你的口袋里掏出来的东西更轻,并带上你的骑行纪念照片(返回价值)。 (具体的细节将取决于调用约定)

现在,这个功能的签名很重要 - 它告诉你乘客期望乘客乘坐什么。返回值类型很重要,因为它可以告诉您为您乘坐的纪念照片带来什么样的盒子形状。但功能的确切大小并不重要。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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