为什么我们可以取消引用函数指针
Why can we dereference a function pointer?
很明显,正如您所知,我是指针的新手。我来自Java,没有指针。
我仍然不明白为什么我们可以取消引用函数指针?我们可以取消引用int指针,因为我们知道int是4字节,但我们不能取消引用void指针,因为不知道它的长度。对于函数指针,虽然我们知道函数的返回值和参数的数据类型(长度),但我们不知道函数在文本中的长度,那么我们如何知道函数的长度,以便解引用它呢?
指针相当于一张纸,上面用盲文写着街道地址。
当你取消引用它时,你会把它交给一个盲人,他会走到这个地方。这个盲人不知道那里是否有坑、房子、河流或商场,除非你告诉他们:告诉他们是指针的类型。
几乎所有地址的长度都相同。
当你知道一个指针指向一个int
时,你就是在告诉盲人在那个地址期待一个int
。所以他们走到那里,与那里的任何东西互动,就好像它是int
一样。
当你知道指针是函数指针,并且你取消引用它并调用它时,盲人不需要知道函数有多大:他们只需要知道它从哪里开始。功能有点像游乐园的游乐设施——你上了它们,然后在某个时候它们会把你踢开。几乎总是在你上的地方把你踢掉,口袋里掉出来的东西会让你更轻,还带着你游乐设施的纪念品照片(退货价值)。(具体细节将取决于呼叫约定)
现在,功能的特征很重要——它告诉你乘坐的乘客希望带什么。返回值类型很重要,因为它告诉你带什么形状的盒子作为你骑行的纪念品。但函数的确切大小并不重要。
当然,我们可以继续讨论成员函数指针、远近指针、引用和其他更深奥的东西。
好问题。我以前也有同样的问题。函数点的大小与任何其他指针的大小相同。唯一的区别是函数指针指向内存的文本部分。每次调用方法时,计算机都会取消引用作为方法名称的函数指针。
在抽象中,"取消引用"指针意味着将其转换回所指向的对象。对于具体类型,对象的大小是相关的,但这是由类型本身决定的,而不是由指针决定的。当你调用一个函数时,调用代码当然不需要知道这个函数有多大,所以当你取消引用一个函数指针时,你也不需要知道。
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 无法将右值引用函数与 GCC 匹配
- C ++引用函数参数似乎包含原始对象的副本,而不是充当"real reference"
- 通过引用函数传递指针参数是什么意思?
- 常量引用函数参数的地址何时唯一?
- 我想了解为什么在这个例子中使用引用函数?或者引用在c++函数中的重要性
- C++ 通过引用函数传递数组,但内容保持不变
- 用数组或指针引用函数?
- 引用函数如何"int &foo();"工作?
- 常量引用函数参数:是否可以禁止临时对象?
- 计算在代码中引用函数的次数
- <initializer_list> 引用函数
- 字符串引用(函数)的差异
- 在类中引用函数时的"No Matching Function for Call"
- 无法通过引用函数"calcValues"中"firstNum"和"secondNum"变量来更改值
- 尝试引用已删除的函数(不引用函数)
- 引用函数指针
- 引用函数按值和自动返回
- 为什么我们可以取消引用函数指针
- 通过引用函数传递值的目的是什么