繁体   English   中英

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

[英]Why can we dereference a function pointer?

显然,正如你所知,我是新手。 我来自Java没有指针。

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM