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

時間 2021-09-05 11:59:54

1樓:匿名使用者

因為是在傳地址,值傳遞時候就不能改變實慘值了

2樓:匿名使用者

cpystr函式中的形參是字元指標,而字元指標並沒有改變,只是字元指標指向的記憶體空間的值發生改變。

3樓:

因為你的引數傳遞的是指標,那麼這個引數就是實參 不是你所說的形參。

4樓:匿名使用者

它改變的時*p1,而不是p1自己。 *p1和p1不是一個東西

5樓:

你這個引數用的都是地址(指標)在傳值,當然可以。首先p2指的是b的首地址,然後傳入的兩個引數都是指標,指向的是地址,最後將p1指向的地址裡的值依次賦給p2指向的地址裡的值,所以最終b就有了新值china;

你看看這個,獲取可以幫你理解這個問題:

#include "stdio.h"

void cpystr(char p1,char p2)void main()

6樓:匿名使用者

說的是普通傳參、、你這傳的是指標當然 能改變 了

7樓:

由程式輸出可見:形引數組array與實引數組a佔用的是同一個空間!

8樓:匿名使用者

形參和實參的區別

形參出現在函式定義中,在整個函式體內都可以使用, 離開該函式則不能使用。

實參出現在主調函式中,進入被調函式後,實參變數也不能使用。

形參和實參的功能是作資料傳送。發生函式呼叫時, 主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。

1.形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時, 即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。 函式呼叫結束返回主調函式後則不能再使用該形參變數。

2.實參可以是常量、變數、表示式、函式等, 無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。

3.實參和形參在數量上,型別上,順序上應嚴格一致, 否則會發生「型別不匹配」的錯誤。

4.函式呼叫中發生的資料傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函式呼叫過程中,形參的值發生改變,而實參中的值不會變化。

5.當形參和實參不是指標型別時,在該函式執行時,形參和實參是不同的變數,他們在記憶體中位於不同的位置,形參將實參的內容複製一份,在該函式執行結束的時候形參被釋放,而實參內容不會改變。

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

9樓:匿名使用者

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

10樓:

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

11樓:匿名使用者

形參其實是在

bai把實參傳遞給子

du函式的時候定義了

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

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

void fun(int &x)

x = x + 1;

void main()

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

12樓:找一個物理女

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

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

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

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

13樓:匿名使用者

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

14樓:匿名使用者

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

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

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

指標(指標);

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

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

c語言,函式引數傳遞方式是單向的,形參不能給實參賦值是什麼意思? 自定義一個函式最後用return

15樓:足球隊聯絡員

實參把值傳給形參以後就和形參切斷聯絡了,對形參操作後得到的是副本。c語言是嚴謹的,一個地址對應唯一的引數,但同一個引數可能有不同的地址 拿經典的swap交換函式舉例 如果你交換的不是指定地址的變數 只是普通變數 那麼他給你返回的結果就是你給的變數的副本的交換 而當交換物件變成指定地址的物件的時候 就有唯一性了 這是真正的交換

拿現實生活舉例 讓張三和李四交換他們的妻子 天啊你怎麼知道是哪個張三哪個李四?為了不影響其他的張三李四,只好新建一個張三和李四的副本來交換了 這個就叫嚴謹 所以必須知道他們二人的明確地理位置 才能交換他們的妻子 實現真的交換

16樓:蒼老師的戀愛

哪個老師教你函式引數傳遞方

向為單向的?

如果引數如普通變數,並非指標的話,傳遞為單向,主調函式傳向被調函式如果引數為指標型別,則在被調函式中可以修改地址中的值,也就形成了雙向傳遞

自定義一個函式最後return那是函式返回值,不是引數

17樓:匿名使用者

我覺得第一句話有點多餘,他說的是這個意思

void fun(int a);

int b;

void fun(b = a);

我覺得他大概是這個意思,不能用後面這種賦值。

c語言中,形參指標變數的值改變不能使實參指標變數的地址發生改變,而可以改變它的值。請問這句話對麼?

18樓:匿名使用者

這個總共有兩個問題:

第一個是「實參指標變數的地址」應該改為「實參指標變數的值」。實參指標變數的值是指該指標指向的變數的地址,而實參指標變數的地址則是該指標變數的地址,屬於二維指標了。

第二個是個語文問題:後面的「可以改變它的值」,這個它具體是指形參指標變數還是指實參指標變數呢?又或者是指實參指標指向的變數呢?

所以正確的說法是:

c語言中,形參指標變數的值改變不能使實參指標變數的值發生改變,而可以改變形參指標變數的值,也可以改變實參指標指向的變數的值。

o(∩_∩)o~

19樓:

正確,上**:

void fun(int* p)

int main(void)

執行一下,一目瞭然!

20樓:

正確。實參傳給型參的只是一個地址,你可以改變地址裡的值。

21樓:周生

1.正確

2.使用二級指標,即傳指標的地址

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

通俗講指標作形參,形參裡儲存的是地址的值,這個值與實參的某個變數的地址是一樣的,所以當改變形參所指向的地址裡存的資料,其實改變的就是實參那個變數的值。而普通變數作形參,與實參中的變數其實是使用不同的儲存空間,所以當形參的值發生改變時,實參所在儲存空間的值並沒有發生改變。 應該是指標可以改變實參所指變...

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

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

C語言中形參與實參怎麼傳遞,c語言中形參和實參的區別?

我簡單描述一下 c語言傳遞引數機構是這樣的 非指標類的資料傳遞引數時傳數值,指標類資料傳遞引數時傳地址 這裡陣列名也算指標 比如int max int a,int b 這時候如果呼叫這個函式max x1,x2 僅僅將x1和x2的數值傳遞給函式max,a與x1佔有不同的記憶體區域 int max in...