C語言中,函數(shù)參數(shù)只能傳值。與傳值對應的是傳引用,C語言不支持函數(shù)參數(shù)傳引用,C++語言才支持。

廣平網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站設計等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)建站。
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ù)等等。
不能,得先在開頭對其進行位定義(sbit),直接操作的話編譯時會報錯的
你的第一個代碼,主函數(shù)里定義的a不會釋放,所以可以正常輸出;
但第二個代碼中,shuru()函數(shù)返回a的地址后,a所占的空間被釋放,所以shuchu(x)是一個隨機值。
改成全局變量吧。
#includestdio.h
int?a=3;
int?*shuru()
{
return?a;
}
void?shuchu(int?*p)
{
printf("%d\n",*p);
}
int?main()
{
int?*x;
x=shuru();
shuchu(x);
}
C語言中,所有的變量都存儲在內(nèi)存中,可以通過運算符獲得變量的內(nèi)存地址,函數(shù)調(diào)用時,只需要把普通變量前加上符號,就可以達到傳遞變量地址的目的。
例如:
定義一個結(jié)構(gòu)體類型
struct?Yearmonthday
{?
int?year,?month,?day;
};
定義相關(guān)函數(shù),參數(shù)類型指定為結(jié)構(gòu)體類型指針
void?input(struct?Yearmonthday?*p1)?//函數(shù)形參p1是結(jié)構(gòu)體指針類型
{
printf("請輸入年,月,日:");
scanf("%d,%d,%d",p1-year,p1-month,p1-day);
}
在主函數(shù)中定義一個結(jié)構(gòu)體變量,調(diào)用相關(guān)函數(shù),傳遞變量地址
int?main()
{?
struct?Yearmonthday?ymd;
input(ymd);?//傳遞變量地址,以便帶回數(shù)據(jù)
printf("date=%d/%d/%d\n",?ymd.year,?ymd.month,?ymd.day?);?//輸出結(jié)果
return?0;
}
先舉個簡單例子:
#include iostream
using namespace std;
void Add1(int *a)
{
(*a)++;
}
void Add2(int a)
{
a++;
}
int main()
{
int x=1,y=5;
Add1(x);
Add2(y);
coutx" "yendl;
return 0;
}
輸出:
2 5
這兩個自加函數(shù)中,Add1是指針傳遞,Add2是數(shù)值傳遞,
在調(diào)用Add2(y)時,系統(tǒng)是先建造一個int型變量a,再將y的值傳給a(此時y和a是兩個不同地址的變量,只是兩者值相同),然后a++,卻對y沒有任何操作,故在函數(shù)調(diào)用結(jié)束后,釋放a,而y沒任何變化;
在調(diào)用Add1(x)時,系統(tǒng)先建造int型指針a,然后將實參x的地址傳給了指針a,故此時a與x是指向同一地址,即共享統(tǒng)一數(shù)據(jù),當對地址a內(nèi)的數(shù)據(jù)進行操作,就是對x進行操作。a++時自然也對x++,當函數(shù)調(diào)用結(jié)束,指針a釋放掉,x的值此時已經(jīng)發(fā)生了變化。
這就是兩者不同,地址傳遞的參數(shù)都是指針類型,于數(shù)值傳遞不一樣。
至于選擇那種傳遞,就要看這個程序的具體目的和功能了,一般要對參數(shù)進行修改的要用地址傳遞,而只是調(diào)用參數(shù)的數(shù)據(jù)進行其他計算并不需要修改數(shù)據(jù)本身宜用數(shù)值傳遞。
還有什么不明白嗎
指針就是地址,那也就是指針變量作為函數(shù)參數(shù)的傳遞嘍 。
例:對輸人的兩個整數(shù)按大小輸出。
#includestdio.h
void main()
{
void swap(int *p1,int *p2);
int a,b.
int *pointer1,*pointer2;
scanf("%d,%d",a,b);
pointer1=a; pointer2=b;
if(ab)
swap(pointer1,pointer2);
printf("\n%d,%d\n",a,b);
}
void swap(int *p1,int *p2)
{int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
網(wǎng)站名稱:c語言地址做函數(shù)參數(shù)嗎,c語言里的參數(shù)
文章分享:http://chinadenli.net/article21/dsggjjd.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設、網(wǎng)站改版、定制開發(fā)、域名注冊、品牌網(wǎng)站制作、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)