//數組指針
int arr[10];
int(*p)[10] = &arr;
//函數指針
int Add(int x, int y);
int(*pf)(int, int) = &Add;
//int(*pf)(int, int) = Add;//該代碼與上面的代碼意義相同,即函數名就可以代表函數的地址
代碼示例( *( void (*)() ) 0 )();
0先與 (void(* )()) 結合,也就是說0先被強制類型轉換為 void(* )() 的函數指針,然后又被解引用(* (void(* )())0) 就相當于使用在0地址處的類型為void(*)()的一個函數,而后面的那個括號本來就沒有參數。
void (*signal(int, void(*)(int)))(int);
signal是變量名,signal先與后面的括號結合,表明signal是一個函數,括號內的內容表明該函數第一個參數的參數類型是int,第二個參數的參數類型是void(* )(int),該代碼去掉signal(int, void(* )(int)),剩下的內容是void(*)(int),這部分內容是signal函數的返回類型。
//typedef unusigned int u_int
typedef void(*pf)(int);
pf signal(int, pf);
使用typedef將void(*)(int) 重定義為pf, 然后再用pf表示signal函數更加容易理解(注意重命名時的書寫)
函數指針數組存放函數指針的數組就是函數指針數組
//指針
int* p = NULL;
//指針數組
int* arr[5];
//函數指針
int(*pf)(int, int);
//函數指針數組
int(*pf[5])(int, int);
int(* pf[5])(int, int)中pf先與[]結合表明pf是一個數組,去掉pf[5]后的內容是該數組中的元素類型int(* )(int, int),也就是說該數組中存放的有5個類型為int(* )(int, int)的函數指針。
示例:計算器#includevoid menu();
int Add(int, int);
int Sub(int, int);
int Mul(int, int);
int Div(int, int);
int main()
{int x = 0;
int y = 0;
int ret = 0;
int input = 0;
int(*pf[5])(int, int) = {NULL, Add, Sub, Mul, Div};
do
{menu();
scanf("%d", &input);
if (input<= 4 && input >= 1)
{ printf("Enter two numbers: ");
scanf("%d%d", &x, &y);
ret = pf[input](x, y);
printf("%d\n", ret);
}
else if (0 == input)
{ printf("退出程序\n");
}
else
{ printf("輸入錯誤\n");
}
} while (input);
return 0;
}
int Add(int a, int b)
{return a + b;
}
int Sub(int a, int b)
{return a - b;
}
int Mul(int a, int b)
{return a * b;
}
int Div(int a, int b)
{return a / b;
}
void menu()
{printf("\n1.add 2.sub\n");
printf("\n3.mul 4.div\n");
printf("\n 0.exit\n");
}
該程序中的函數指針數組將調用的函數都存放到一個數組中,在使用的時候可以直接使用不同的下標來訪問不同的函數。
指向函數指針數組的指針指向函數指針數組的指針是一個指針,它指向了一個數組,該數組是函數指針數組。
//函數指針
int(*p)(int, int);
//函數指針數組
int(*pf[5])(int, int);
//指向函數指針數組的指針
int(*(*pff)[5])(int, int);
pff 先與 * 結合,表明 pff 是一個指針,去掉 ( * pff ) 之后,剩下的就是 pff 指向的類型,也就是 int( * [5])(int, int)。因為 pff 可以理解為對函數指針數組取地址,也就是 pff = &pf, * pff也就應該等價于 pf ,所以可以直接在函數指針數組 pf 的基礎上得到指向函數指針數組的指針,也就是將 pf 直接改為 * pff ,再在 * pff 的外面加上括號。
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧