有沒有C語言大神,這個函式看不懂啊,請幫忙解釋下

時間 2021-05-07 20:00:40

1樓:金半田

( ( void ( * )( firm_rewrite_param *, uword ) )( void *)ram_firm_rewriting )( p_addr, *( ( uword *)__sectop( "cchecksum" ) ) );

這是一個函式呼叫:

第一步,找實參列表:從最後一個右括號)往前找與之匹配的左括號(

( p_addr, *( ( uword *)__sectop( "cchecksum" ) ) )

以上是函式實參列表:

(1)p_addr:某個地址(指標)

(2)__sectop( "cchecksum" ):指向名為"cchecksum"的section首地址

( uword *)__sectop( "cchecksum" ) 將之強制轉換為uword*指標型別

*( ( uword *)__sectop( "cchecksum" ) )解引用操作,即對應uword結構實體

第二步,確定函式名或函式指標:

( ( void ( * )( firm_rewrite_param *, uword ) )( void *)ram_firm_rewriting )

上面對ram_firm_rewriting進行了兩次強制轉換:

(1)第一次:(void *),即將ram_firm_rewriting強制轉換為void*指標型別

(2)第二次:( void ( * )( firm_rewrite_param *, uword ) ),接上,將ram_firm_rewriting最終強制轉換為void ( * )( firm_rewrite_param *, uword ) 指標型別。

void ( * )( firm_rewrite_param *, uword ) 是一個函式指標,這個函式接收兩個引數,型別為:firm_rewrite_param *和uword,返回值型別void。

由此,可推知第一步實參p_addr型別為firm_rewrite_param *。

而根據define,ram_firm_rewriting即( ubyte *)__sectop( "ram_top" ),亦即指向名為"ram_top"的section首地址(強制轉換為ubyte *指標型別)。猜測ubyte*即unsigned char*。

轉換為函式指標型別,才能執行相應函式呼叫。

2樓:最大的寶寶

硬體這塊不懂,不過語法上應該是把ram_firm_rewriting這個指標先強制轉為void *,再進一步強制轉為一個函式指標,這個函式指標指向一個包含兩引數為firm_rewrite_param*及uword,返回值為void的函式。

轉為函式指標後,自然是呼叫相應的函式了,實際的引數是p_addr和分號之前那一長串東西。

總結一下,這個函式呼叫類似於ram_firm_rewriting(p_addr, 型別為uword的引數2)

3樓:匿名使用者

看函式主要的作用——sectop(cchecksum),區域頂部開始,檔案從ram的區域頂部開始寫入param的區域裡面。

很像活動記憶體轉出儲存記憶體或者另一塊晶片的操作;

解釋,涉及開始地址的名字,區域名字,

c語言,求大神解釋函式裡的引數有點看不懂請解釋

4樓:

函式的參

複數分形式引數和制

實際引數,在函式的定義體中bai的引數du是形式引數,在函式被調zhi用處是實dao際引數。

//函式的定義體

float add(float x,float y)

引數x,y都是形式引數。

//呼叫add函式

c=add(a,b);  //引數a,b都是實際引數。

程式從main()函式開始執行,當執行到c=add(a,b);位置時,程式就要跳轉到add()函式體中執行

這時,就有一個傳參的過程,即實參—>形參傳值,亦即a—>x,b—>y。實參變數a,b和形參變數

x,y在記憶體中是屬於不同的儲存單元,當add()函式執行完成後,將函式返回值賦值給主函式main()

中的變數c,而形參x,y的記憶體空間被作業系統**,而實參a,b的記憶體空間直到main()函式執行後記憶體

空間才被系統**。

c語言用歐幾里得演算法定義的求最大公約數的函式沒看懂,哪位大神能解釋一下?具體到每一步驟。

5樓:id雞蛋炒韭菜

if(x換,使得x是兩數中最大值,y是最小值

while(y!=0) //演算法核心,首先用x模y,取得餘數,然後每次用除數模餘數,直到整除為止

c語言中有沒有四捨五入的函式,C語言有沒有資料的四捨五入?什麼情況下會用到四捨五入?資料型別轉換?

詮釋影 double ceil double x 返回不小於x的最小整數值 然後轉換為double型 double floor double x 返回不大於x的最大整數值。double round double x 返回x的四捨五入整數值int abs int 返回整數絕對值 double fabs...

C語言新手求教大神,請大神幫忙看看這個程式問題在哪?請詳解

int sum int int int pro int int int dif int int 函式宣告錯誤,int之間有逗號 希望可以幫到你! 飛來橫禍 給你改好了 你自己慢慢看 不會的可以聯絡我 問題還是比較多 include stdio.h int sum int,int int pro in...

C 或是C語言中,有沒有延遲輸出的命令?

使用延時函式或中斷函式可以實現。可以用sleep 函式,例如sleep 1000 表示延遲1秒。自己做個硬延時就可以了。如果不想佔用資源,可以用定時器,定時時間到了,才執行指定的命令。在c 或是在c語句中,有沒有那種延遲輸出的命令,比如要依次輸出三條語句或是字串,要使輸出第一條後停頓幾秒再輸出第二條...