函數(shù)定義和函數(shù)調(diào)用是兩個概念,函數(shù)定義 為f(int *arr),表示參數(shù)是一個整型指針,因此使用該函數(shù)時要傳遞一個地址,如變量int a=0; 調(diào)用函數(shù)f傳遞a的地址時需要寫為f(a);而對于數(shù)組來說,如int b[]=[1,2,3], b本身就是數(shù)組首元素的地址,因此調(diào)用函數(shù)f傳遞數(shù)組首地址需要寫為f(b)。
堅(jiān)守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價(jià)值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都木屋小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站設(shè)計(jì)營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計(jì)、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。
選D
因?yàn)榈谝粋€參數(shù)是地址傳遞,fun(b,a);中傳入a字符。*c=*c+1將c的值變?yōu)閎字符。主函數(shù)的值改變。
第二個參數(shù)是值傳遞,所以在函數(shù)中d的值為B字符。但是并不影響主函數(shù)的值,所以主函數(shù)輸出a的值是A。b的值是b。
這是個函數(shù)指針 前面的void為返回值類型 后面的void*為參數(shù)類型.
函數(shù)指針是可以作為某個函數(shù)的參數(shù)的.
(1) 指向函數(shù)的指針變量的一般定義形式為:
數(shù)據(jù)類型 (*指針變量名)(函數(shù)參數(shù)列表)
函數(shù)名是可以缺省的 作為參數(shù)傳遞的時候會去調(diào)和 void*(*)(void*)這個類型相匹配的函數(shù)的
作為參數(shù)調(diào)用這個函數(shù)的時候 返回類型是void* 就相當(dāng)于傳了一個參數(shù)類型為void*,當(dāng)然這個函數(shù)指針的參數(shù)也是void*的
C語言中,函數(shù)參數(shù)只能傳值。與傳值對應(yīng)的是傳引用,C語言不支持函數(shù)參數(shù)傳引用,C++語言才支持。
C++傳引用函數(shù):
void foo(int a) { a = 3; }
假如a = 2,執(zhí)行foo(a)后,a = 3。
---
C語言可以模擬傳引用,方法是通過指針來實(shí)現(xiàn):
void foo2(int* ap) { *ap = 3; }
假如a = 2,執(zhí)行foo2(a)后,a = 3
foo2(a)調(diào)用本質(zhì)上仍然是傳值,只不過傳遞的是指針,指針即是地址,地址本質(zhì)上是一個無符號整數(shù)。
如果:
void foo3(int b) { b = 3; }
假如a = 2,執(zhí)行foo3(a)后,a = 2。這是因?yàn)閒oo3(a)調(diào)用過程中,a值傳給形參b,修改b的值與實(shí)參a無關(guān)。
注意到,foo3(a)與上述foo(a)傳引用的調(diào)用是形式一樣的。
既然C語言通過指針可以實(shí)現(xiàn)傳引用調(diào)用,為什么C++還要引入引用這個特性呢?這是因?yàn)镃++引入的很多新特性需借助引用來實(shí)現(xiàn),比如,拷貝構(gòu)造函數(shù)等等。
#include?stdio.h
int?*fmax(int?*,int?*);????/*函數(shù)的聲明和下面的定義參數(shù)類型不一致,應(yīng)該改成指針類型*/
void?main()
{
int?x,y;int?*c,*d;
int?*pmax;
scanf("%d%d",x,y);
c=x;
d=y;
pmax=fmax(c,d);
printf("max=%d\n",*pmax);
printf("max=%d\n",*pmax);
}
int?*fmax(int?*a,int?*b)
{
int?*p;
p=*a*b?a:b;
return?p;
}
指針在函數(shù)參數(shù)中通常用于傳遞一個結(jié)構(gòu),一個字符串,或者一個需要修改的變量;因?yàn)樵?2位系統(tǒng)中變量size最大也只能是32位,也就是4個字節(jié),一個long,再大就不能直接傳遞了。