当我像下面这样在一次初始化函数指针时,它不起作用。
ptr[3]={add, subtract, multiply};
这会产生以下结果:
[错误] 在 '{' 标记之前需要表达式
然而,逐个初始化可以正常工作。为什么会这样呢?
//array of function pointers
#include<stdio.h>
void add(int a, int b){
printf("%d\n", a+b);
}
void subtract(int a, int b){
printf("%d\n", a-b);
}
void multiply(int a, int b){
printf("%d\n", a*b);
}
int main(){
void (*ptr[3])(int, int);
//ptr[3]={add, subtract, multiply}; this initialization does not work
//but this works
ptr[0]=add;
ptr[1]=subtract;
ptr[2]=multiply;
ptr[2](3,5); //15
}
ptr[3]
是越界访问。然后你试图将一个列表分配给它,而ptr[i]
是一个单一指针。这不是初始化(因为你要从声明中分开做),也与函数指针无关(使用int
数组会得到相同的错误)。 - HolyBlackCatvoid (*ptr[3])(int, int) = {add, subtract, multiply};
这样的初始化应该可以工作。 - Gaurav Pathak