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

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

請問能不能利用for,while,if等語句甚至構造其他函數等方法 進行地址賦值

請問能不能利用for,while,if等語句甚至構造其他函數等方法 進行地址賦值

C
弒天下 2023-04-20 19:15:06
【問題1】指針數組可以存放函數的地址嗎?【問題2】如果可以,數組指針類型是啥?是int *num[ ]還是chan *num[ ]還是其他類型?【問題3】如果可以,有木有簡單方法解決下面問題有100個函數,HS1(),HS2(),HS3(),……,HS98(),HS99(),HS100()。還有1個指針數組num[100]來存放這100個函數的地址,要求將 HS1()的地址放到num(1)中, HS2()地址放到num(2)中, HS3()的地址放到num(3)中, 以此類推 直到 HS100()的地址放到num(100)當然一個挨著一個的地址賦值是可以的,但那樣要100次才行,能不能利用for,while,if等語句甚至構造其他函數等方法 進行地址賦值?
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

#include "stdio.h"
void output(int x)
{
printf("%d\n",x);
}
void main()
{
void(*test[100])(int);//函數指針數組的定義,我試驗的只能是固定大小的數組,動態數組不知道怎么弄
for (int i=0;i<100;i++)
{
test[i] = output;
(*test[i])(i);
}

}
這個程序的輸出是100行數字從0~99

 


查看完整回答
反對 回復 2023-04-23
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

1、數組里面可以存放函數地址,這就是傳說中的函數指針數組。
2、數組指針就是一個指針里面存放數組的首地址的指針,int (* num)[ ]是這種類型。
3、定義
typedef int (* a)(參數類型列表);//重定義函數名
a num[100]; 
int i ;
for(i = 1;i<=100;i++)
num[i] = HSi;

查看完整回答
反對 回復 2023-04-23
?
慕運維8079593

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

這種情況,HS1(),HS2(),~ HS100() 這些函數的參數類型和返回值最好是完全相同的,這樣才能放到同一個數組中才能再次對其調用并使用。

舉個例子,下面是省略簡寫的100個函數在for循環中分別被調用后輸出內容和返回值的處理方法,實際使用中可以參照這種方式進行使用,真正一個一個賦值的方法應該是不會用到的。

#include "stdio.h"

unsigned char HS1(unsigned char ucArg);
unsigned char HS2(unsigned char ucArg);
/* ………… */
unsigned char HS99(unsigned char ucArg);
unsigned char HS100(unsigned char ucArg);

unsigned char (*const wucFunctionPointer_tbl[])( unsigned char ) = {
HS1,
HS2,
/* ………… */
HS99,
HS100
};

void main(void)
{
unsigned char aucLoopCnt = 0;
unsigned char aucFuncReturn = 0;

for (aucLoopCnt = 0; aucLoopCnt < (sizeof(wucFunctionPointer_tbl)/sizeof(void*)); aucLoopCnt++)
{
aucFuncReturn = wucFunctionPointer_tbl[aucLoopCnt](aucLoopCnt);
printf("Function Return is %d\n", aucFuncReturn);
}
}

unsigned char HS1(unsigned char ucArg)
{
printf("This is HS1 Running: Arg is %d\n", ucArg);
return ucArg;
}

unsigned char HS2(unsigned char ucArg)
{
printf("This is HS2 Running: Arg is %d\n", ucArg);
return ucArg;
}

/* ………… */

unsigned char HS99(unsigned char ucArg)
{
printf("This is HS99 Running: Arg is %d\n", ucArg);
return ucArg;
}

unsigned char HS100(unsigned char ucArg)
{
printf("This is HS100 Running: Arg is %d\n", ucArg);
return ucArg;
}

 


查看完整回答
反對 回復 2023-04-23
  • 3 回答
  • 0 關注
  • 186 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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