C語言中,函數(shù)參數(shù)只能傳值。與傳值對應(yīng)的是傳引用,C語言不支持函數(shù)參數(shù)傳引用,C++語言才支持。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、成都網(wǎng)站制作、吳江網(wǎng)絡(luò)推廣、小程序開發(fā)、吳江網(wǎng)絡(luò)營銷、吳江企業(yè)策劃、吳江品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供吳江建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
C++傳引用函數(shù):
void foo(int a) { a = 3; }
假如a = 2,執(zhí)行foo(a)后,a = 3。
---
C語言可以模擬傳引用,方法是通過指針來實現(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。這是因為foo3(a)調(diào)用過程中,a值傳給形參b,修改b的值與實參a無關(guān)。
注意到,foo3(a)與上述foo(a)傳引用的調(diào)用是形式一樣的。
既然C語言通過指針可以實現(xiàn)傳引用調(diào)用,為什么C++還要引入引用這個特性呢?這是因為C++引入的很多新特性需借助引用來實現(xiàn),比如,拷貝構(gòu)造函數(shù)等等。
定義sort函數(shù)時使用的參數(shù)是指針,需要注意的是這個指針是指向數(shù)組的,數(shù)組的名稱其實就是一個指針,所以p可以做sort的參數(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;
}
改成下面代碼看看:
#include?stdio.h
void?abc(int?*i,int?*j)
{
int?m;
m=*i;?//指針變量的值也就是地址不能賦值給一般變量
*i=*j;//*i,*j才是指針變量指向的變量的值
*j=m;???
}
void?main()
{
int?a,b;
int?*pa=a,*pb=b;
printf("請輸入a,b的值:");
scanf("%d,%d",a,b);
abc(pa,pb);??//
printf("a=%d\tb=%d\n",a,b);
}
選D
因為第一個參數(shù)是地址傳遞,fun(b,a);中傳入a字符。*c=*c+1將c的值變?yōu)閎字符。主函數(shù)的值改變。
第二個參數(shù)是值傳遞,所以在函數(shù)中d的值為B字符。但是并不影響主函數(shù)的值,所以主函數(shù)輸出a的值是A。b的值是b。