定義一個變量,系統(tǒng)的確會分配一個內(nèi)存單元A來存儲這個變量。而A的固定地址已經(jīng)是物理地址了。不需要在分配一個來存儲該地址。
成都創(chuàng)新互聯(lián)公司服務(wù)項目包括尚志網(wǎng)站建設(shè)、尚志網(wǎng)站制作、尚志網(wǎng)頁制作以及尚志網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,尚志網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到尚志省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
該變量已經(jīng)實際存在在內(nèi)存物理地址上了。
函數(shù)的地址是在代碼空間中,在編譯時就分配好了。
代碼空間就是系統(tǒng)中存放你寫的代碼的地方,不同的行地址當(dāng)然就不一樣咯
不能,在一開始創(chuàng)建的時候計算機(jī)就會自動分配給它特定的地址,況且有些地址還是不能訪問的。
你說的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ù)。
不是的
1、實參在定義時就開辟存儲單元,這個存儲單元地址在整個程序中是固定不變的;
2、只有在函數(shù)調(diào)用時才給形參開辟存儲空間,如果是值傳遞,則將實參的值賦給形參,如果是地址傳遞,則為形參開辟一個臨時指針變量,然后把實參的地址傳送給形參
3、函數(shù)執(zhí)行完畢返回主程序時,釋放形參所占的存儲單元。