指標變數作為函式引數為了改變指標變數指向實參的值

2021-07-26 12:01:37 字數 876 閱讀 4027

思考:為什麼兩個執行結果不同

c語言使用值傳遞時,僅僅將實參的值傳遞給形參。 對於第一種寫法 main函式傳遞給swap函式的是&a和&b的值,即a和b所在的位址的值 那麼swap函式裡面通過*x來更改的就是&a所在的位址裡面的值,也就是a本身的值了,所以第一種寫法main函式呼叫swap函式之後,a和b的值會發生互換。 對於第二種寫法 main函式傳遞給swap函式的是a和b的值,即只是將15和8傳遞給了swap函式 那麼swap函式裡面更改15和8,和main函式的a和b沒有啥關係的,所以第二種寫法main函式呼叫swap函式之後,a和b的值不會發生互換。swap函式只是更改了x和y的值,對a和b沒有什麼影響

要理解值傳遞和位址傳遞的區別。

第二個程式就是值傳遞。實參a的值傳給形參x,實參b的值傳給形參y。這裡的x與a只是值相等了,但是兩個不同的記憶體單元。好比一班和二班兩位同學,只是名字都叫張三,卻是兩個不同的人。同理,b和y也類似於一班和二班另兩位同學,只是名字都叫李四,卻是不同的兩人。在swap函式中,只是對x和y操作,類似於只是二班的張三和李四發生了點變化。他們的變化是不會影響一班的張三和李四的。所以x和y的變化不會影響a和b。因為這是四個不同的記憶體單元。 第乙個程式是位址傳遞。實參&a(a的位址)傳給形參x,實參&b(b的位址)傳給形參y。這樣的話,x就指向了a,y也指向了b。**中temp=*x;就等價於temp=a;了。 同理,*x=*y; 等價於a=b; *y=temp;等價於b=temp; 。這裡對*x和*y操作,實際上就是對a和b的操作。所以會影響a和b的值

指標變數作為函式引數

函式的引數可以是指標型別,它的作用是將乙個變數的 位址傳送到另乙個函式中。指標變數作為函式引數與變數本身作函式引數不同,變數作函式引數傳遞的是具體值,而指標作函式引數傳遞的是記憶體的位址。用指標變數作函式引數,在被調函式的執行過程中,應使指標變數所指向的引數值發生變化,這樣,函式在呼叫結束後,其變化...

指標變數作為函式引數

先描述乙個題目,題目是這樣的,輸入a和b兩個整數,按先大後小的順序輸出a和b。note your choice is c ide include stdio.h void main p1就是a,是整型變數。而 temp是指標變數temp所指向的變數。但temp中並無確定的值 它的值是不可預見的 因此...

指標變數作為函式引數

先描述乙個題目,題目是這樣的,輸入a和b兩個整數,按先大後小的順序輸出a和b。note your choice is c ide include stdio.h void main void swap int p1,int p2 int a,b int pointer 1,pointer 2 sca...