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

時間 2021-09-05 11:58:53

1樓:

通俗講指標作形參,形參裡儲存的是地址的值,這個值與實參的某個變數的地址是一樣的,所以當改變形參所指向的地址裡存的資料,其實改變的就是實參那個變數的值。

而普通變數作形參,與實參中的變數其實是使用不同的儲存空間,所以當形參的值發生改變時,實參所在儲存空間的值並沒有發生改變。

2樓:匿名使用者

應該是指標可以改變實參所指變數的值(實參是一個指標),因為指標就是變數所在記憶體塊的地址,通過地址找到變數,改變的就是原本的變數的值,而普通的呼叫會先複製一個臨時變數,改變的是複製出的變數,對原本的實參沒有影響

3樓:我姐是恐龍

例如一個函式 f(int x,int y)f(a,b)呼叫時 相當於int x=a;int y=b然後在函式內改變x,y的值 a,b的值是不會變化的而f(int *x,int *y)

f(&a,&b)呼叫時 相當於 int *x=&a ; int *y=&b;

然後在函式內改變 *x , *y 的值 學過指標的你肯定知道 a,b的值是會變化

因為*x與a *y與b是同一塊地址

希望能幫到你

滿意請採納

4樓:veket的小號

傳值 是 給你一份檔案影印件(不收回去)你可以 修改這份影印件,拿不到原件你怎麼改原件?。。。

傳地址 是給你 原件 放在 檔案室的哪個櫃子裡 ,你自己去看(檔案恕不外借,你只能在那個櫃子**拿起看看然後放回去,至於改不改,這個得看有沒有改的條件,既然能接觸到原件 ,自然有機會改原件。。。。)

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

5樓:匿名使用者

樓主你好,要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的沒有關係。

6樓:

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

7樓:匿名使用者

形參其實是在

bai把實參傳遞給子

du函式的時候定義了

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

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

void fun(int &x)

x = x + 1;

void main()

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

8樓:找一個物理女

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

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

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

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

9樓:匿名使用者

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

10樓:匿名使用者

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

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

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

指標(指標);

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

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

為什麼c語言不能通過執行呼叫函式來改變實參指標變數的值

11樓:小雨田大

呼叫函式,只能改變指標指向的記憶體空間的內容,不能改變實參指標變數的值。專

我覺得題

屬主對指標變數,還算有一點了解。

指標變數,其實也就是一個變數,但它的值是一塊記憶體的地址。

函式呼叫時,你只是把實參指標變數的值,即一塊記憶體的地址,賦(複製)給了形參,然後,你在函式內把形參指標指向別的記憶體空間地址,與實參指標就無關了,實參指標還是指向原來的那塊記憶體空間。

另外,你把實參指標變數的值,賦(複製)給了形參,然後形參指標就能操縱這塊記憶體了,可以改變這塊記憶體的容。此時,實參指標指向的那塊記憶體的內容也就改變了,但實參指標的值還是函式呼叫前的那塊記憶體空間的地址。

12樓:匿名使用者

是可以的啊?你**有問題吧,發來看看

為什麼這個指標不能改變實參的值

13樓:匿名使用者

因為在sp函式中,將b的地址賦給了a,所以main函式中的p就沒改變。

c語言說形參不能改變實參的值,為什麼這個賦值語句可以

因為是在傳地址,值傳遞時候就不能改變實慘值了 cpystr函式中的形參是字元指標,而字元指標並沒有改變,只是字元指標指向的記憶體空間的值發生改變。 因為你的引數傳遞的是指標,那麼這個引數就是實參 不是你所說的形參。 它改變的時 p1,而不是p1自己。p1和p1不是一個東西 你這個引數用的都是地址 指...

形參和實參的區別是什麼,c語言中形參和實參是什麼意思?有什麼區別?

淳于長順印黛 實參是用來填充形參的。當函式被呼叫時,形參列在函式名後面的括號裡。執行函式呼叫時,實參被傳遞給形參。1 形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數。2 實參可以是常量 ...

簡述什麼是形參和實參,引數傳遞的方式有哪些

舉個簡單例子來說明 int func int a int b 這裡a和b是形式引數,這個時候a和b的值是未知的。等呼叫的時候如 fun 5,6 這裡 a 5 b 6 這裡的5和6對於函式func來說就是實參,代表實實在在的值,而不是被一個名稱指代,那麼這個函式就會變成 fun 5,6 函式裡面a的值...