指针数组
int a[5]={1,2,3,4,5};
int *p[5];
for(int i=0;i<5;i++){
p[i]=&a[i];
}
定义一个数组a与一个指针数组p,可以使用for循环将指针数组里的每一个指针分别分配给数组a里的每一个元素。此时*p[0]=1,*p[1]=2,*p[2]=3........
函数指针与回调函数的应用
using namespace std;
//不同的回调函数
void sport0(string step[], int n) {
}
void sport1(string step[], int n) {
cout << "在篮球场" << step[n] << endl;
}
void sport2(string step[], int n) {
cout << "在广场" << step[n] << endl;
}
void sport3(string step[], int n) {
cout << "在会堂里" << step[n] << endl;
}
void sport4(string step[], int n) {
cout << "在足球场" << step[n] << endl;
}
void sport5(string step[], int n) {
cout << "在排球场" << step[n] << endl;
}
string exercise[] = { "打篮球","跳舞","唱歌","踢足球","打排球" };
//对其进行重新命名pfun_t=void(*)(string*,int)
typedef void(*pfun_t)(string*,int);
//定义一个函数指针数组,里面分别存储要进行回调的函数
pfun_t ports[] = { sport1,sport2,sport3,sport4,sport5 };
//进行控制回调函数的主函数
void sports(string step[], int n, void(*sport)(string*, int)) {
int count = sizeof(ports) / sizeof(ports[0]);
if (n<1 || n>count) return;
pfun_t p = ports[n - 1];
p(step, n-1);
}
int main(void) {
int n=0;
cin>>n;
sports(exercise,n, sport0);
return 0;
}
上述代码实现了通过输入不同的数值会调用不同的函数,后续如果有新的回调函数只需将其添加入函数指针数组中,其他的代码不需要改变就可进行调用。
函数指针的定义要满足定义的指针包含类型要和函数的类型保持一致,如函数void sport(string str,int n);要定义函数指针为void (*sp)(string,int)=sport;此时函数指针sp指向函数sport,用sp("打球",1);就可以直接调用sport函数。