[英]Do I have to initialize function pointers one by one?
當我一次初始化 function 指針時,如下所示,它不起作用。
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]={add, subtract, multiply};
RHS(正確地)是一個適合三個 function 指針數組的初始化列表。 但是,LHS ( ptr[3]
) 是錯誤的:它只是數組的單個元素,而且是一個越界元素。
只需在聲明中執行“賦值”,並將其初始化:
int main(void)
{
void (*ptr[3])(int, int) = {add, subtract, multiply}; // this initialization does work
ptr[2](3, 5); //15
}
這里實際上沒有什么特別之處,與您的數組元素是 function 指針這一事實有關。 除了在其聲明之外的任何位置,都不能將數組“分配給”(使用=
運算符)整體。 在變量聲明中, =
標記的使用在形式上不是賦值操作; 這是一個初始化。 有用的閱讀: C 中的初始化與賦值。
您需要在聲明期間進行初始化。
//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) = {add, subtract, multiply};
ptr[2](4,5); //20
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.