不是說形參值改變不影響實參嗎?大家看看這個程式,解釋下得到的結果啊

2021-04-29 10:48:41 字數 1620 閱讀 5400

1樓:種燒餅的怪叔叔

1)7 ,7, 7,3,7,3

2)6,4,6

形參不能改變實參,為什麼在用指標傳遞數值的時候又可以改變呢?

2樓:匿名使用者

樓主你好,要bai理解這個du必須理解乙個問題,就是指標的zhi定義dao。指標自己是

有乙個存版儲空間的,權裡面存的是被指的乙個數(如a)的位址。也就是說指標中存的是a的位址。呼叫函式的時候,通過指標找到a的位址,然後對a的值進行改變,也就改變了a的值。

其二是,我們普通的賦值(主函式中),a=2,其實並不是對a賦值,a只是乙個代號,a是指向a所在的位址,a只是乙個入口,就是對a所在的位址中的存的資料進行了改變。

如果在講a作為實參傳資料給形參b,這樣的話,就是把a位址中的資料傳給了b,呼叫函式中對b的賦值等,僅僅是影響到了b中的值,而沒有影響到了a的值。

形象的說吧,指標到最後是乙個東西,不管a還是b對這樣東西做修改,都會改變。而普通的是兩樣東西,b做修改的僅僅只是b的東西,跟a的沒有關係。

3樓:

是啊,形參不可能改變實參,可你傳遞指標,實際上就是相當於把這個引數實際位址給他了,而不是乙個拷貝,穿指標和穿實參的意義是一樣的,在一些沒有指標的語言 用 (ref 引數)來傳遞實參,實際傳的就是指標

4樓:匿名使用者

形參其實是在

bai把實參傳遞給子

du函式的時候定義了

zhi乙個新dao的變數,但是這個變數專的值和實參屬相等所以在子函式裡 無論怎麼修改都不會影響到呼叫它的函式的實參的值在用指標做引數的時候 因為傳遞的不是值本身,而是它所對應的位址,我們改變值的時候是改變那個位址裡的值 所以 傳遞指標的話 就能改變值了

如果你希望在子函式裡可以修改呼叫它的函式的值的話你可以使用引用函式就比如#include

void fun(int &x)

x = x + 1;

void main()

就是在引數前加了乙個&就行了

5樓:找乙個物理女

我談談我的看法,請多抄包bai涵。

首先搞清記憶體。記憶體裡面的東西du是不變的,zhi假設有兩個地dao址,位址為1的其數值為10,位址為2的其數值為20。而a和b只是從其中取值,並且p1,p2各是其位址,(雖然數值上p1,p2與1和2相等,但其本質並不同,也就是其服務的物件不同。

)現在p1,p2變了,也就是a和b取值的位置變了,所以其最後的數值變了,視覺上就形成了a和b實參交換數值的結果。!

這是我的理解,是基於記憶體的知識理解。

6樓:匿名使用者

指標傳遞的是位址,位址的值改變了,使得指標傳遞的值改變!實際位址沒變,變得是那個位址上的值!

7樓:匿名使用者

我說一下我的理解抄,以鑰匙和鎖為襲舉bai例值(鎖)

:當dua門有一把鎖a(值),b門複製

zhia門一樣的dao鎖,不管以後b門的鎖如何改變,都不會影響a門。

指標(指標);

這種情況下,只有乙個a門,傳送指標就好像複製了a門的鑰匙a,我叫做b鑰匙。這樣我有了a門的鑰匙b就可以隨意的改變門鎖a了(值)。

這是我的理解,歡迎指正。

函式形參,為什麼值不改變?C

從主函式main開始執行,執行到fun x 時,此時為x實參,其值為2,下一步呼叫fun函式,將2傳遞給形參x,繼續執行程式,形參x的值被賦為7,但注意,被呼叫的函式為無值型void,沒有return,無法將得到的形參值x 7返回主函式,所以x的值仍然為2,沒有改變。1c 標準中沒有所謂的 c 為什...

不是說密度不隨體積和質量改變的嗎,可是為什麼體積變大,密度變

這有乙個前提,前提是質量不變或者體積不變的情況下,密度是對特定體積內的質量的度量,密度等於物體的質量除以體積。當質量一定的情況下,如果體積變大,密度是會變小的,不過有乙個前提條件是質量一定的情況下。擴充套件資料密度是物質的特性之一,每種物質都有一定的密度,不同物質的密度一般是不同。一般來說,不論什麼...

男朋友每天不是說我笨,就是說我廢物,是不是不喜歡我啊

跟喜不喜歡你沒關係。這男的只是純粹沒素質,也不懂尊重人。如果硬要在一起的話,自己保重。是你想錯了,說句不好聽的,這叫 恨鐵不成鋼 在男朋友面前表現的不要太過依賴和幼稚,要學會理智 也許在貶低你讓你覺得他很優秀還願意跟你處朋友,你更該死心踏地,有這種可能,無論你做什麼他都不會滿意,做什麼他都不順眼。他...