[英]Passing argument to array of function pointers
我正在用C編寫一個使用函數指針數組的程序。 如果不包含參數,則可以使用代碼調用函數而不會出現問題。
int (*functionsArray[2][3])() = {
{functionOne,functionTwo,functionThree},
{functionFour,functionFive,functionSix}
};
但是,當我嘗試傳遞參數int x
:
int (*functionsArray[2][3])(int x) = {
{functionOne,functionTwo,functionThree},
{functionFour,functionFive,functionSix}
};
我收到一個錯誤:
invalid conversion from 'int (*)()' to 'int (*)(int)'
同樣,這些函數都不返回int,我不應該將它們聲明為void嗎?
void(*functionsArray[2][3])(int x) = {
{functionOne,functionTwo,functionThree},
{functionFour,functionFive,functionSix}
};
嘗試此操作將導致錯誤:
error: invalid conversion from 'int (*)()' to 'void (*)(int)'
謝謝。
只要您正確聲明函數,該方法就可以正常工作:
#include <stdio.h>
int functionOne(int x) { return 1; }
int functionTwo(int x) { return 2; }
int functionThree(int x) { return 3; }
int functionFour(int x) { return 4; }
int functionFive(int x) { return 5; }
int functionSix(int x) { return 6; }
int (*functionsArray[2][3])(int x) = {
{functionOne, functionTwo, functionThree},
{functionFour, functionFive, functionSix}
};
int main (void) {
printf ("%d\n", (functionsArray[0][1])(99));
printf ("%d\n", (functionsArray[1][2])(99));
return 0;
}
該程序的輸出為2
和6
。
如果您不希望返回任何值,它也將起作用:
#include <stdio.h>
void functionOne(int x) { puts ("1"); }
void functionTwo(int x) { puts ("2"); }
void functionThree(int x) { puts ("3"); }
void functionFour(int x) { puts ("4"); }
void functionFive(int x) { puts ("5"); }
void functionSix(int x) { puts ("6"); }
void (*functionsArray[2][3])(int x) = {
{functionOne, functionTwo, functionThree},
{functionFour, functionFive, functionSix}
};
int main (void) {
(functionsArray[0][1])(99);
(functionsArray[1][2])(99);
return 0;
}
該程序還會輸出2
和6
,這與預期的一樣。
歸結為確保函數聲明與數組中給定的類型匹配。
聲明數組時:
int (*functionsArray[2][3])(int x) =
{
{functionOne,functionTwo,functionThree},
{functionFour,functionFive,functionSix}
};
數組的每個元素都必須為int (*)(int)
。 否則,編譯器會正確報告錯誤。
舉一個簡單的例子:
void foo()
{
}
int (*fp)(int x) = foo;
應該會導致相同的編譯器錯誤,因為您嘗試使用foo
初始化類型為int (*)(int)
的變量,其類型為void (*)()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.