1 當今計算機啟動時,硬體會去呼叫位址為0的函式,用c語言模擬這個過程,應該如何宣告這個函式?
呼叫某個函式,c語言中一般會利用指向函式的指標,即如下形式:
void (*f)(void);
上面的表示式的意思是, f是指向函式的指標,指向的函式的形式是: 引數是void型別的,返回值也是void型別的。這個很好理解,通常我們根據運算子的優先順序來理解,首先*f是個指標,其次*f()表明這個指標指向乙個函式。
另外,型別轉換是經常用的一種方法,表示乙個返回值是void,指向函式的指標的型別即為:
(void (*f) (void))
有了上面的知識,我們就可以寫出上面提出的問題了。
如果,我們把0理解為乙個指向函式的指標,則問題很容易解決了,可以這麼定義:
void (*0)(void);
但是*必須要乙個指標來做運算元,而且這個指標是個指向函式的指標,那麼可以把0進行型別轉化,編譯器是允許這麼做的。
(void (*)(void))0
這就表示把0強制轉化為返回值是void的函式指標的形式,那麼這個函式怎麼呼叫呢?假設fp是指向函式的指標,那麼*fp就是那個函式,那麼
(*fp)(),就是fp指向的那個函式的呼叫了,但是,一般會這麼寫fp(),這是ansic規定的(*fp)()的簡寫的形式。
同理,*((void (*)(void))0) 就是這個函式,那麼(*((void (*)(void))0))()就是這個函式的呼叫了
兩個函式宣告的理解
1 當今計算機啟動時,硬體會去呼叫位址為0的函式,用c語言模擬這個過程,應該如何宣告這個函式?呼叫某個函式,c語言中一般會利用指向函式的指標,即如下形式 void f void 上面的表示式的意思是,f是指向函式的指標,指向的函式的形式是 引數是void型別的,返回值也是void型別的。這個很好理解...
理解函式宣告 signal函式的宣告
分兩步分析 假定變數fp是乙個函式指標,呼叫方法如下 fp 因為fp是乙個函式指標,那麼 fp就是該指標指向的函式,所以 fp 就是呼叫該函式的方式。ansi c標準允許程式設計師將上式簡寫為fp 的運算子高於 2.使用具體的函式指標替換fp,此處將0做型別強制轉換,轉換為函式指標,替換fp。對乙個...
python 兩個小練習理解遞迴函式
遞迴是解決問題的一種方式,它和迴圈很像 它的整體思想是,將乙個大問題分解為乙個個的小問題,直到問題無法分解時,再去解決問題 遞迴式函式的兩個要件 1.基線條件 2.遞迴條件 例題 編寫求n 的遞迴函式 分析 n 等於1 2 n 1 n n 也等於n n 1 比如 10 10 9 9 9 8 8 8 ...