C語言中,函數參數只能傳值。與傳值對應的是傳引用,C語言不支持函數參數傳引用,C++語言才支持。
創新互聯建站服務項目包括月湖網站建設、月湖網站制作、月湖網頁制作以及月湖網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,月湖網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到月湖省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!
C++傳引用函數:
void foo(int a) { a = 3; }
假如a = 2,執行foo(a)后,a = 3。
---
C語言可以模擬傳引用,方法是通過指針來實現:
void foo2(int* ap) { *ap = 3; }
假如a = 2,執行foo2(a)后,a = 3
foo2(a)調用本質上仍然是傳值,只不過傳遞的是指針,指針即是地址,地址本質上是一個無符號整數。
如果:
void foo3(int b) { b = 3; }
假如a = 2,執行foo3(a)后,a = 2。這是因為foo3(a)調用過程中,a值傳給形參b,修改b的值與實參a無關。
注意到,foo3(a)與上述foo(a)傳引用的調用是形式一樣的。
既然C語言通過指針可以實現傳引用調用,為什么C++還要引入引用這個特性呢?這是因為C++引入的很多新特性需借助引用來實現,比如,拷貝構造函數等等。
確實很急,函數聲明 中的函數名都打錯了~~返回值也沒打。
函數傳遞是值傳遞,傳遞指針的值 能改變 調用函數的值是因為 他們的地址是 一樣的。而實質上也是值傳遞,進來的是指針指向的地址。
而你mop函數交換的是 指針 也就是 地址 值 當然不影響調用函數。
主函數中
p=m;m=n;n=p;
交換是因為這幾個指針一直在作用域中,沒有釋放。交換了指針中存放的地址,就是指向的內存地址的改變。運行下下面二的程序 能幫你理解。
#includestdio.h
int main()
{
int a=604,b=750,c;
int *m,*n,*p;
m=a;
n=b;
printf("指針沒有交換前的地址m n %d %d\n",m,n);
p=m;m=n;n=p;
printf("指針交換后的地址m n %d %d\n",m,n);
printf("%d%d\n",*m,*n);
printf("值沒有交換前的地址m n %d %d\n",m,n);
c=*m;*m=*n;*n=c;
printf("值交換后的地址m n %d %d\n",m,n);
printf("%d%d\n",*m,*n);
return 0;
}
===========================
#includestdio.h
int main()
{
void nop(int *x,int *y);
void mop(int *x,int *y);
int a=604,b=750;
int *m,*n;
m=a;
n=b;
printf("主函數中指針交換前的地址\tm n %d %d\n",m,n);
mop(m,n);
printf("主函數中指針交換后的地址\tm n %d %d\n",m,n);
printf("%d%d\n",*m,*n);
nop(m,n);
printf("%d%d\n",*m,*n);
return 0;
}
void mop(int *x,int *y)
{
printf("指針沒有交換前的地址\t\tm n %d %d\n",x,y);
int *z;
{z=x;x=y;y=z;}
printf("指針交換后的地址\t\tm n %d %d\n",x,y);
}
void nop(int *x,int *y)
{int a;
a=*x;*x=*y;*y=a;
}
首先需要聲明函數指針的類型(下例子中的typedef int (*fpFunt)(int a,int b),再定義某個函數(下例中的Add),在其參數列表中使用該函數指針類型,同時需要定義另一函數(下例中的fpAdd,注意該函數形式要和fpFunt一致,本例子中是返回一個整數,兩個整型參數)作為實參用。這里在手機上使用易歷知食軟件內的微C程序設計來編程,舉個兩個數相加的例子,代碼如下圖:
調用后運行結果如下圖:
標題名稱:c語言指針函數形式參數 c 函數指針參數
網頁路徑:http://m.newbst.com/article16/docjpgg.html
成都網站建設公司_創新互聯,為您提供服務器托管、App開發、、虛擬主機、企業建站、移動網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯