參數傳遞有3種方式:
值傳遞
地址傳遞
引用傳遞
tips:
被調用函數的形參只有函數被調用時才會臨時分配存儲單元,一旦調用結束占用的內存便會被釋放
值傳遞和地址傳遞,傳遞的都是實參的一個拷貝
C語言中實參和形參之間的數據傳遞是單向的“值傳遞”,單向傳遞,只能由實參傳給形參,反之不行
輸出格式并沒有選擇%p而是選擇了%d,因為十進制的數看起來更直觀
1 值傳遞
如果只是傳遞值的話:
#include<stdio.h>//值傳遞:傳值voidswap(intx,inty);intmain(){inta=2,b=3;printf("before:實參為a,b\na=%d,地址為%d\nb=%d,地址為%d\n\n",a,&a,b,&b);swap(a,b);printf("after:實參為a,b\na=%d,地址為%d\nb=%d,地址為%d\n\n",a,&a,b,&b);return0;}voidswap(intx,inty){inttmp;tmp=x;x=y;y=tmp;printf("inside:形參為x,y\nx=%d,地址為%d\ny=%d,地址為%d\n\n",x,&x,y,&y);}
執行結果:從形參x和y的地址來看,傳遞的是實參a和b的拷貝。對拷貝的修改不會改變實參的值。。
如果值傳遞,傳遞的是地址呢?
#include<stdio.h>//值傳遞:傳地址voidswap(int*x,int*y);intmain(){inta=2,b=3;printf("before:實參為&a,&b\na=%d,地址為%d\nb=%d,地址為%d\n\n",a,&a,b,&b);swap(&a,&b);printf("after:實參為&a,&b\na=%d,地址為%d\nb=%d,地址為%d\n\n",a,&a,b,&b);return0;}voidswap(int*x,int*y){int*tmp=NULL;tmp=x;x=y;y=tmp;printf("inside:形參為*x,*y\n*x=%d,x=%d,地址為%d\n*y=%d,y=%d,地址為%d\n\n",*x,x,&x,*y,y,&y);}
執行結果:形參是a和b的地址,但通過a和b的地址(即x和y)訪問到的是a和b的拷貝。直接交換a和b的地址失敗。
2地址傳遞
#include<stdio.h>//地址傳遞voidswap(int*x,int*y);intmain(){inta=2,b=3;printf("before:實參為&a,&b\na=%d,地址為%d\nb=%d,地址為%d\n\n",a,&a,b,&b);swap(&a,&b);printf("after:實參為&a,&b\na=%d,地址為%d\nb=%d,地址為%d\n\n",a,&a,b,&b);return0;}voidswap(int*x,int*y){inttmp;tmp=*x;*x=*y;*y=tmp;printf("inside:形參為*x,*y\n*x=%d,x=%d,地址為%d\n*y=%d,y=%d,地址為%d\n\n",*x,x,&x,*y,y,&y);}
執行結果為: 形參是a和b的地址,但通過a和b的地址(即x和y)訪問到的是a和b的拷貝。雖然不能直接交換a和b的地址,但是可以修改a和b的地址(即x和y)指向的值。也就是說,不能直接修改指針,但是可以修改指針指向的值。所以這一次a和b的值交換了。
3 引用傳遞
#include<stdio.h>//引用傳遞voidswap(int&x,int&y);intmain(){inta=2,b=3;printf("before:實參為a,b\na=%d,地址為%d\nb=%d,地址為%d\n\n",a,&a,b,&b);swap(a,b);printf("after:實參為a,b\na=%d,地址為%d\nb=%d,地址為%d\n\n",a,&a,b,&b);return0;}voidswap(int&x,int&y){inttmp;tmp=x;x=y;y=tmp;printf("inside:形參為&x,&y\nx=%d,地址為%d\ny=%d,地址為%d\n\n",x,&x,y,&y);}
void swap( int &x, int &y); //表示傳遞進去的是實參,而不是拷貝。
執行結果為:傳遞的是實參,而不是實參的拷貝。對實參的修改,將會成功的改變其中的值。
補充
int x=1;
int *y=&x; //用于指針傳遞,y有自己獨立的內存地址,存儲的內容是x的地址,*y是x的值
int &z=x; //用于引用傳遞,可以理解為z就是x,x就是z,只不過名字不一樣
關于c語言中形參和實參的傳遞方式有什么區別就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
江蘇銀行是在江蘇省內無錫,蘇州南通等十家城市商業銀行的基礎之上,合并重組而成的現代股份制商業銀行,江蘇銀行的成立也開創了地方法人銀行改革的新模式,江蘇銀行在2007年1月24日正式的掛牌營業,是江蘇地區唯一的一家省屬地方法人銀行,接下來我們帶大家來詳細的了解一下江蘇銀行的網上銀行怎么樣辦理開通。江蘇銀行網上銀行怎么對賬?1、我們需要打開江蘇銀行的官方網站,在官方網站找到注冊的地方點擊注冊,然后在對...
(相關資料圖)公開資料顯示,周力源出生于1996年,系七匹狼創始人周少雄的兒子。周力源曾在加拿大多倫多大學學藝術史,2018年正式加入七匹狼,擔任七匹狼狼圖騰主理人。此外,他還參與七匹狼投資的國際輕奢品牌Karl Lagerfeld的運營管理。該品牌因為是德國著名服裝設計師“老佛爺”Karl Lagerfeld的同名品牌被熟知,七匹狼在2017年收購其大中華區業務。到了20...
莊家出貨的手法有哪些?1、一字出貨法這種操作手法很兇悍,在于短期快速拉高股價后,又以低于現價約3%的價格賣出,價格瞬間掉下三個點很容易吸引很多買盤,每當“賣一”快被消耗完畢,有新的賣單壓上去,一直到空頭手中無籌碼,這個過程只需要幾分鐘,在分時圖上留下一個“一”字這種出貨方法適用于熱門股。2、釣魚線出貨法這種手法,在分時圖上留下酷似釣魚的形狀,適用于熱...