函數(shù)指針
由于指針可以指向任何存儲器位置中的地址,因此它們也可以指向可執(zhí)行代碼的開頭。
函數(shù)指針或函數(shù)指針指向內(nèi)存中函數(shù)的可執(zhí)行代碼。函數(shù)指針可以存儲在數(shù)組中,也可以作為參數(shù)傳遞給其他函數(shù)。
函數(shù)指針聲明使用 * 就像使用任何指針一樣:
return_type (*func_name)(parameters)
(*func_name)? 周圍的括號很重要。沒有括號,編譯器會認(rèn)為函數(shù)在返回指針。
聲明函數(shù)指針后,必須將其分配給函數(shù)。
下面的簡短程序聲明一個函數(shù),聲明一個函數(shù)指針,將該函數(shù)指針分配給該函數(shù),然后通過該指針調(diào)用該函數(shù):
#include <stdio.h>
void say_hello(int num_times); /* function */
int main() {
void (*funptr)(int); /* function pointer */
funptr = say_hello; /* pointer assignment */
funptr(3); /* function call */
return 0;
}
void say_hello(int num_times) {
int k;
for (k = 0; k < num_times; k++)
printf("Hello\n");
}
函數(shù)名稱指向可執(zhí)行代碼的開頭,就像數(shù)組名稱指向其第一個元素一樣。
因此,盡管諸如?funptr = &say_hello?和??(*funptr)(3)? 之類的語句是正確的,但在函數(shù)分配和函數(shù)調(diào)用中不必包括地址運(yùn)算符&和間接運(yùn)算符*。
【選詞填空】聲明一個函數(shù)sum,該函數(shù)返回其參數(shù)之和,并聲明一個指向sum的函數(shù)指針psum。
int?sum(int?a,?int?b)?{
??return?a??b;
}
int?(??psum)(int,?)?=?;
*
sum
int
+
函數(shù)指針數(shù)組
函數(shù)指針數(shù)組可以替換開關(guān)或if語句以選擇動作,如以下程序所示:
#include <stdio.h>
int add(int num1, int num2);
int subtract(int num1, int num2);
int multiply(int num1, int num2);
int divide(int num1, int num2);
int main()
{
int x, y, choice, result;
int (*op[4])(int, int);
op[0] = add;
op[1] = subtract;
op[2] = multiply;
op[3] = divide;
printf("Enter two integers: ");
scanf("%d%d", &x, &y);
printf("Enter 0 to add, 1 to subtract, 2 to multiply, or 3 to divide: ");
scanf("%d", &choice);
result = op[choice](x, y);
printf("%d", result);
return 0;
}
int add(int x, int y) {
return(x + y);
}
int subtract(int x, int y) {
return(x - y);
}
int multiply(int x, int y) {
return(x * y);
}
int divide(int x, int y) {
if (y != 0)
return (x / y);
else
return 0;
}
?int?(*op[4])(int,?int);?語句聲明函數(shù)指針的數(shù)組。每個數(shù)組元素必須具有相同的參數(shù)和返回類型。
在這種情況下,分配給數(shù)組的函數(shù)具有兩個int參數(shù)并返回一個int。
【填空題】調(diào)用funcs數(shù)組指向的函數(shù)。文章來源:http://www.zghlxwxcb.cn/news/detail-497778.html
//?suppose?f1,?f2,?and?f3?are?declared
void?(*funcs[3])()?=?{f1,?f2,?f3};
for?(int?ix?=?0;?ix?<?;?ix++)?{
??[ix]();?
}文章來源地址http://www.zghlxwxcb.cn/news/detail-497778.html
到了這里,關(guān)于【編程語言 · C語言 · 函數(shù)指針】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!