簡體   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