2016-08-09 144 views
0

這個c代碼是做什麼的?空圓括號中的星號是什麼意思?

{ 
    int (*func)(); 
    func = (int (*)()) code; 
    (int)(*func)(); 
} 

特別是我對主題感到困惑。

+0

請提供[MCVE](http://stackoverflow.com/help/mcve)。什麼是_subj_? – Harald

+0

[cast'code'指向函數返回-intint](http://cdecl.ridiculousfish.com/?q=%28int+%28*%29%28%29%29code)。 – WhozCraig

+0

@WhozCraig「Bad Request」打開你的鏈接 – lucidbrot

回答

1

記得做類型轉換,我們使用以下命令:

(type_to_cast) value; 

當你想投一些value到某種type

還記得你定義一個函數指針作爲

return_type (*pointer_name) (data_types_of_parameters); 

和一個函數指針的類型

return_type (*) (data_types_of_parameters) 

最後,你可以調用一個函數與它的指針

(*func_pointer)(arguments); 

因此,考慮到這4點,你會發現你的C代碼:

第一個定義了一個函數指針func

,蒙上code作爲函數指針,它的值賦給func

,調用由func指向的功能,並且降reutrned到int值。

5

這是對函數指針的強制轉換。

序列號int (*)()用於一個函數指針,該函數指針接受不確定數量的參數,並返回一個int。用(int (*)())括起來,當與表達式結合使用時,將會轉換表達式的結果。

你給出的代碼,有評論說:

// Declare a variable `func` which is a pointer to a function 
int (*func)(); 

// Cast the result of the expression `code` and assign it to the variable `func` 
func = (int (*)()) code; 

// Use the variable `func` to call the code, cast the result to `int` (redundant) 
// The returned value is also discarded 
(int)(*func)(); 
+3

該函數調用將放棄返回值。 – haccks

0
  • int (*func)();聲明func作爲一個指針採用任何數量的參數,並返回int功能。

  • 在語句func = (int (*)()) code;,流延塗布到code,然後將其分配給函數指針func

  • (int)(*func)();沒有多大意義。演員不需要,它會丟棄返回值。呼叫應該是單純的喜歡

    int var = func(); 
    

    int var = (*func)(); 
    
相關問題