重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
定義一個變量,系統(tǒng)的確會分配一個內(nèi)存單元A來存儲這個變量。而A的固定地址已經(jīng)是物理地址了。不需要在分配一個來存儲該地址。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),象山企業(yè)網(wǎng)站建設(shè),象山品牌網(wǎng)站建設(shè),網(wǎng)站定制,象山網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,象山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
該變量已經(jīng)實際存在在內(nèi)存物理地址上了。
你說的for,我看出來你已經(jīng)知道存在那些功能,但是還不知道某個功能是不是被實現(xiàn)了,下面又是一個例子:
FUN funs[16]={fun1,NULL,fun3};//假設(shè)我們知道最多也就16個功能,但是目前只有功能0和2被實現(xiàn),功能1和其他的3~15都還沒有實現(xiàn)
for(...)
{
int funCode;
...
if(funs[funCode]!=NULL)//如果不是NULL,說明對應(yīng)的功能號被實現(xiàn)了
funs[funCode](...)//調(diào)用
}
---------------------------------------------------------
樓主,C語言是不應(yīng)該干這件事的!
樓主你的需求實際上可以這樣描述:
1 怎樣才能根據(jù)輸入條件來調(diào)用不同的函數(shù)
2 條件和函數(shù)是一一對應(yīng)的,但是函數(shù)在哪是不確定的,例如可能是其他函數(shù)傳進(jìn)來的。
我舉個簡單例子來解決你的問題
typedef void (*FUN)(...);//參數(shù)列表和返回值自己填
//定義一些功能函數(shù)
void fun1(...)
{
printf("1\n");
}
void fun2(...)
{
printf("1\n");
}
....
//上面的注意了,參數(shù)列表和返回值要一樣的
FUN funs[]={fun1,fun2,...};//把函數(shù)的指針放進(jìn)數(shù)組,就像你C51的向量區(qū),存放了許多函數(shù)的地址,這里最終放的也是地址,只不過等程序編譯好了才知道是多少,
...//一堆代碼
int funCode;//用來存放計算出來的功能代碼,例如0表示fun1,1表示fun2
...//一堆超級復(fù)雜而且重要且不可逃避的代碼之后,funCode被設(shè)為了某個值,這個這個值實際上是我精心而且故意設(shè)計為理解簡單的小玩意,代表某個功能的代碼。
funs[funCode](...)//調(diào)用功能函數(shù)(知道funCode需要精心設(shè)計了吧,funCode為0就調(diào)用了fun1),當(dāng)然你也可以把funs傳到某個函數(shù),然他也像這樣使用傳進(jìn)去的函數(shù)。
變量是存放在內(nèi)存中的,只要是存放在內(nèi)存中的二進(jìn)制數(shù)就會有一個內(nèi)存的地址,所有變量是有地址的!
那函數(shù)是什么呢?函數(shù)是由一些運行的語句組成的,程序運行的時候就會把函數(shù)中的語句調(diào)用到內(nèi)存中去,那么函數(shù)代碼在內(nèi)存中開始的那個內(nèi)存空間的地址就是函數(shù)的地址!
至于函數(shù)中用的變量的地址并不是放在代碼區(qū)的,一般都放在另外的兩個地方,其實地址上是有很大的差值的
希望你能理解上面的內(nèi)容,祝愿你學(xué)習(xí)C語言能馬到成功!