簡體   English   中英

function個指針必須一個一個初始化嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM