2013-07-07 166 views
1

我的代碼看起來是這樣的:(n爲0,1,2中和3的數,和loc_A/B/C/d每一個代表一個代碼塊)跳轉表&代碼指針

int test(int n){ 
    static void *jt[7]= {&&loc_A, &&loc_B, &&loc_C, &&loc_D}; 
    goto *jt[n]; 
    loc_A: 
    ...... 
    loc_B: 
    ...... 
    loc_C: 
    ...... 
    loc_D: 
    ...... 
} 

「& & loc_A」代表什麼?它是loc_A代表的代碼的地址(或位置)嗎?

+0

爲什麼你要使用跳躍,你可以做到沒有跳躍(這是更好)我應該補充說,這可以幫助你http://stackoverflow.com/questions/15702297/dynamic-jump-to-label-in -c – ncm

+1

你可以用switch語句做同樣的事情。 – 2013-07-07 04:15:00

+0

@imsiso:謝謝你,但實際上我正在學習switch語句的程序集表示...並將原始c代碼翻譯爲上面的擴展C形式以便說明「跳轉表」。 – Allen

回答

1

是的,但它不是標準C.相反,它是一個GNU language extension。因此,最好避免。

+0

謝謝。這個「&&」與C中的「&」有什麼關係?像指針的指針或類似的東西?或者它只是代表一個代碼位置而創建的。 – Allen

+0

@Allen:我想GNU的人需要選擇一個符號,所以他們選擇了一種那種 - 暗指「地址」的想法。 –

+0

然後我明白了。但是這可能真的令人困惑......謝謝! – Allen