函數(shù)指針
是指向函數(shù)的指針,它允許您在程序運(yùn)行時(shí)動(dòng)態(tài)選擇要調(diào)用的函數(shù)。函數(shù)指針可以像普通變量一樣傳遞、存儲(chǔ)和使用,這使得它們?cè)谠S多編程場(chǎng)景中非常有用,如回調(diào)函數(shù)、函數(shù)表、插件架構(gòu)等。
以下是一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明函數(shù)指針的概念:
#include <stdio.h>
// 聲明兩個(gè)函數(shù),它們具有相同的參數(shù)和返回類型
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
// 聲明一個(gè)函數(shù)指針,它可以指向具有相同簽名(參數(shù)和返回類型)的函數(shù)
int (*operation)(int, int);
// 將函數(shù)指針指向 add 函數(shù)
operation = add;
// 使用函數(shù)指針調(diào)用 add 函數(shù)
int result = operation(5, 3);
printf("Result of add: %d\n", result);
// 將函數(shù)指針指向 subtract 函數(shù)
operation = subtract;
// 使用函數(shù)指針調(diào)用 subtract 函數(shù)
result = operation(5, 3);
printf("Result of subtract: %d\n", result);
return 0;
}
//定義函數(shù)后,首先聲明一個(gè)函數(shù)指針 將這個(gè)函數(shù)指針指向這個(gè)函數(shù),那么這個(gè)指針就有了這個(gè)函數(shù)的性質(zhì),就是函數(shù)指針
函數(shù)數(shù)組:
函數(shù)數(shù)組是一個(gè)數(shù)組,其中的元素都是函數(shù)指針,它允許您將多個(gè)不同的函數(shù)存儲(chǔ)在數(shù)組中,然后可以根據(jù)需要選擇和調(diào)用這些函數(shù)。這對(duì)于編寫(xiě)通用代碼、回調(diào)函數(shù)和動(dòng)態(tài)函數(shù)選擇非常有用。以下是一個(gè)簡(jiǎn)單的C/C++示例,演示了函數(shù)數(shù)組的基本用法:
#include <stdio.h>
// 定義一些函數(shù),它們將作為函數(shù)指針數(shù)組的元素
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int multiply(int a, int b) {
return a * b;
}
int divide(int a, int b) {
if (b != 0) {
return a / b;
} else {
printf("Error: Division by zero\n");
return 0;
}
}
int main() {
// 聲明一個(gè)函數(shù)指針數(shù)組,元素類型是指向函數(shù)的指針
int (*mathFunctions[])(int, int) = {
add,
subtract,
multiply,
divide
};
int a = 10, b = 5;
for (int i = 0; i < 4; i++) {
int result = mathFunctions[i](a, b); // 使用函數(shù)指針數(shù)組調(diào)用不同的函數(shù)
printf("Result of operation %d: %d\n", i + 1, result);
}
return 0;
}
在上述示例中,我們首先定義了四個(gè)不同的數(shù)學(xué)函數(shù) add、subtract、multiply 和 divide,它們都接受兩個(gè)整數(shù)參數(shù)并返回一個(gè)整數(shù)結(jié)果。然后,我們聲明了一個(gè)函數(shù)指針數(shù)組 mathFunctions,該數(shù)組的元素是指向這些函數(shù)的指針。
在 main 函數(shù)中,我們使用循環(huán)遍歷 mathFunctions 數(shù)組,并通過(guò)函數(shù)指針調(diào)用不同的數(shù)學(xué)操作。這使得我們可以在運(yùn)行時(shí)選擇要執(zhí)行的函數(shù),而不需要在代碼中硬編碼不同的操作。函數(shù)數(shù)組是實(shí)現(xiàn)通用和可擴(kuò)展代碼的有用工具。
指針函數(shù)
指針函數(shù)是一個(gè)返回指針的函數(shù)。它是一個(gè)函數(shù),其返回類型是一個(gè)指針類型。
指針函數(shù)的聲明類似于普通函數(shù)聲明,但返回類型是一個(gè)指針。
指針函數(shù)通常用于返回動(dòng)態(tài)分配的內(nèi)存或者指向某個(gè)對(duì)象的指針。
#include <stdio.h>
// 定義一個(gè)指針函數(shù),該函數(shù)返回一個(gè)整數(shù)指針
int* pointerToFunction() {
static int num = 42; // 靜態(tài)變量,保持其值在函數(shù)調(diào)用之間的不變
return # // 返回靜態(tài)變量的地址
}
int main() {
int* result = pointerToFunction(); // 調(diào)用指針函數(shù),得到整數(shù)指針
printf("Value at the pointer: %d\n", *result); // 打印指針?biāo)赶虻闹?/span>
return 0;
}
區(qū)別:
指針函數(shù)是函數(shù)中返回一個(gè)地址,他去用指針是接收。
而指針函數(shù)說(shuō)的事指向這個(gè)函數(shù)的的指針,是可以直接用這個(gè)指針操作這個(gè)函數(shù)的,也就是說(shuō)可以賦值的。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-708699.html
函數(shù)指針
int (*functionPtr)(int, int); // 聲明一個(gè)函數(shù)指針
functionPtr = add; // 將函數(shù)指針指向一個(gè)函數(shù)
int result = functionPtr(5, 3); // 使用函數(shù)指針調(diào)用函數(shù)
題外話,C++中的引用
這個(gè)引用實(shí)際相當(dāng)于是創(chuàng)建了一個(gè)新的名字。通過(guò)函數(shù)內(nèi)部的操作直接改變?cè)紨?shù)據(jù):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-708699.html
函數(shù)參數(shù)傳遞
void modifyValue(int &x) {
x = 42;
}
int main() {
int num = 10;
modifyValue(num); // 通過(guò)引用傳遞參數(shù)
// 現(xiàn)在,num 的值已經(jīng)變?yōu)?42,直接在函數(shù)內(nèi)部把num的值改了
return 0;
}
返回引用: 函數(shù)可以返回引用,以允許鏈?zhǔn)讲僮?,并且可以修改函?shù)外部的變量。
int &getSomeValue() {
static int x = 42;
return x;
}
int main() {
int &ref = getSomeValue(); // 返回靜態(tài)變量的引用
ref = 99; // 修改靜態(tài)變量的值
// 現(xiàn)在,靜態(tài)變量的值為 99
return 0;
}
請(qǐng)注意,引用必須在聲明時(shí)初始化,并且一旦初始化,它將一直引用同一個(gè)對(duì)象,無(wú)法重新綁定到另一個(gè)對(duì)象。引用通常用于傳遞和操作變量而不是創(chuàng)建新的變量。
到了這里,關(guān)于C語(yǔ)言的函數(shù)指針、指針函數(shù), 函數(shù)數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!