具體代碼如下:#include <stdio.h>#include <stdlib.h>typedef int (*Func)() ;int func0(int a);int func1(int a, int b);int func2(int a, int b, int c);int FuncPtrArrInit(Func *p, int n);int func0(int a){printf("Func:%s, a = %d\n", __func__, a);return 0;}int func1(int a, int b){printf("Func:%s, a = %d, b = %d\n", __func__, a, b);return 0;}int func2(int a, int b, int c){printf("Func:%s, a = %d, b = %d, c = %d\n", __func__, a, b, c);return 0;}int FuncPtrArrInit(Func *p, int n){Func fn[3];fn[0] = p[0];fn[1] = p[1];fn[2] = p[2];fn[0](0);fn[1](1,1);fn[2](2,2,2);return 0;}int main(){Func afn[3];afn[0] = func0;afn[1] = func1;afn[2] = func2;FuncPtrArrInit(afn, 3);return 0;}--------------------------------------------我的問(wèn)題就是開(kāi)始處,這個(gè)程序定義了typedef int (*Func)() ;即Func表示一個(gè)返回值為整型,無(wú)形參的函數(shù)指針類(lèi)型。但是下面賦值時(shí),func1,func2,func3每個(gè)函數(shù)的形參個(gè)數(shù)都不一樣,而且均是有形參的,但是上面的代碼就直接將這個(gè)函數(shù)地址給了Func類(lèi)型的數(shù)組afn[3]的各個(gè)成員,為何這樣能行?
2 回答

婷婷同學(xué)_
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
type fun_name();
這種是老式的函數(shù)聲明,參數(shù)表是空的,即使有變?cè)?也不列出, 也就是說(shuō)可以接受任意參數(shù)
老式函數(shù)聲明是過(guò)時(shí)的,不應(yīng)在新代碼中使用,與c++也不兼容
c++中參數(shù)位置用void,或留空,都是沒(méi)有變?cè)?
而c中沒(méi)有變?cè)鞔_寫(xiě)void,
type fun(void);
留空的話(huà)可以填入任意參數(shù)
與老式聲明對(duì)應(yīng)的是老式的參數(shù)聲明方法
float f(a,b,ab)
int a,b;
char ab;
{/*...*/}
添加回答
舉報(bào)
0/150
提交
取消