0
在C,如果我想叫基於鍵盤輸入的功能,我會寫這樣的:大會相當於函數指針數組嗎?
#include <stdio.h>
char A(void) {
return 'a';
}
char B(void) {
return 'b';
}
char C(void) {
return 'c';
}
char (*CHARS[])(void) = {A, B, C};
int main(void) {
char calls[] = {'a', 'b', 'c'};
char c = CHARS[getc(stdin) - 'a']();
printf("%c\n", c);
return 0;
}
我可以在組件調用數組?如果該事實具有相關性,我正在使用nasm
來編譯內核。
編輯 周圍的一些打的多就在剛纔,我想出了:
jmp main
f0:
f1:
f2:
mov ax, 0
main:
mov bx, fns
add bx, ax
cmp bx, 0
je end
call [bx]
inc ax
jmp main
fns dw f0, f1, f2, 0
end:
hlt
是上述正確的(我是從字面上就像兩個天進裝配)?
您的更新代碼有正確的想法。但是:(1)你假設每個地方都有16位地址。那是你要的嗎? (2)你可以擺脫「ax」的使用。假設一個16位尋址模式,你想每次通過你的'main'循環加2到'bx',(3)你想檢查'[bx]'是否爲0,而不是'bx'是否爲0。 bx'不會是0,因爲它是一個指向你的地址表的指針。 – lurker
@lurker是的,它是16位模式。謝謝。 – motoku