指標函式 和 函式指標
指標函式(Function Returning a Pointer)===> 返回一個指標
指標函式是返回指標的函式。也就是說,這種函式的返回型別是一個指標。
定義和使用
- 指標函式的返回型別是一個指標型別
- 透過函式呼叫,返回一個指標
Demo
#include <iostream>
using namespace std;
// 一個返回int指標的函式
int* getMax(int* a, int* b) {
if (*a > *b)
return a;
else
return b;
}
int main() {
int x = 5, y = 10;
int* max = getMax(&x, &y);
cout << "Max value: " << *max << endl; // 輸出 Max value: 10
return 0;
}
關鍵點:
- int* getMax(int* a, int* b) 是一個指標函式,它返回一個指向 int 型別的指標。
- getMax(&x, &y) 返回 x 或 y 的地址。
函式指標 (Pointer to Function)===> 是一個變數
函式指標是指向函式的指標。你可以透過函式指標來呼叫一個函式,就像透過指標訪問變數一樣。
定義和使用
- 函式指標的定義包括函式的返回型別、引數列表和指標名。
# 1. 返回型別 int
# 2. 指標變數名 func_ptr
# 3. (int, int):引數列表
int (*func_ptr)(int, int) = add;
- 它儲存的是函式的地址,可以用來呼叫函式。
Demo【簡易計算器】
#include <iostream>
using namespace std;
// 一個普通函式
int add(int a, int b) {
return a + b;
}
int main() {
// 定義一個指向返回型別為int,引數為兩個int的函式指標
int (*func_ptr)(int, int) = add;
// 使用函式指標呼叫函式
int result = func_ptr(5, 10);
cout << "Result: " << result << endl; // 輸出 Result: 15
return 0;
}
簡易計算器
#include <iostream>
using namespace std;
int add(int a, int b){
return a + b;
}
int sub(int a, int b){
return a - b;
}
int multi(int a, int b){
return a * b;
}
int divide(int a, int b){
return a / b;
}
int mod(int a, int b){
return a % b;
}
int main()
{
int a, b;
char op;
int res = 0;
printf("請輸入表示式>");
scanf("%d %c %d", &a, &op, &b);
switch(op){
case '+':
res = add(a, b);
break;
case '-':
res = sub(a, b);
break;
case '*':
res = multi(a, b);
break;
case '/':
res = divide(a, b);
break;
case '%':
res = mod(a, b);
break;
default:
printf("你是不是傻,計算器只支援加減乘除取餘~");
break;
}
printf("計算結果為:%d\n", res);
return 0;
}
使用函式指標來最佳化
#include <iostream>
using namespace std;
void foo()
{
printf("foo\n");
}
double* fun1(){
static double pi = 3.1415;
return π
}
int add(int a, int b){
return a + b;
}
int sub(int a, int b){
return a - b;
}
int multi(int a, int b){
return a * b;
}
int divide(int a, int b){
return a / b;
}
int mod(int a, int b){
return a % b;
}
int main()
{
int a, b;
char op;
int res = 0;
printf("請輸入表示式>");
scanf("%d %c %d", &a, &op, &b);
int (*funcPtr) (int, int) = NULL; // 操作函式指標,指向具體的運算函式
switch(op){
case '+':
funcPtr = add;
res = add(a, b);
break;
case '-':
funcPtr = sub;
break;
case '*':
funcPtr = multi;
break;
case '/':
funcPtr = divide;
break;
case '%':
funcPtr = mod;
break;
default:
printf("你是不是傻,計算器只支援加減乘除取餘~");
break;
}
printf("計算結果為:%d\n", funcPtr(a, b));
return 0;
}
指標函式 VS 函式指標
指標函式 是一種函式,它返回一個指標。
函式指標 是一種變數,可以儲存函式的地址,並透過它呼叫函式。