亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具體如下,開始定義的Func不是無形參的類型函數指針類型嘛? 謝謝~

具體如下,開始定義的Func不是無形參的類型函數指針類型嘛? 謝謝~

胡子哥哥 2022-06-16 16:11:27
具體代碼如下:#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;}--------------------------------------------我的問題就是開始處,這個程序定義了typedef int (*Func)() ;即Func表示一個返回值為整型,無形參的函數指針類型。但是下面賦值時,func1,func2,func3每個函數的形參個數都不一樣,而且均是有形參的,但是上面的代碼就直接將這個函數地址給了Func類型的數組afn[3]的各個成員,為何這樣能行?
查看完整描述

2 回答

?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

type fun_name();
這種是老式的函數聲明,參數表是空的,即使有變元,也不列出, 也就是說可以接受任意參數
老式函數聲明是過時的,不應在新代碼中使用,與c++也不兼容

c++中參數位置用void,或留空,都是沒有變元,

而c中沒有變元要明確寫void,
type fun(void);
留空的話可以填入任意參數

與老式聲明對應的是老式的參數聲明方法
float f(a,b,ab)
int a,b;
char ab;
{/*...*/}

查看完整回答
反對 回復 2022-06-20
?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

這個是合法的,但具有不確定性,不推薦

查看完整回答
反對 回復 2022-06-20
  • 2 回答
  • 0 關注
  • 122 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號