在C語言中,函式的形參與實參之間的值傳遞是什麼意思 函式呼叫時如主函式中為swap a,b ,而從函式為

2022-09-20 19:41:19 字數 5948 閱讀 4378

1樓:愛夜

以int 型舉例

void swap(int *a, int * b)void swap1(int a, int b)swap(int *, int *);稱之為實參 實際傳遞的是 a和 b 的地址 啊 , 在呼叫a與b 的值(*a)使用的是原來的數 下面的  x,y; a , b 的值是x與y 的記憶體地址

swap1(int ,int); 稱之為形參 實際傳遞的是 a 和b 的值,這裡的a和b 與xy沒關係, 只是x與y 的一個副本。

int swap_test()

2樓:八千漢字

每個函式 會給變數 重新做一個副本 比如

int a,b;

void wap(int a,int b); 可以用 wap( & a,& b) 取 a,b 的地址 傳遞 這樣不會建立新變數

void wap (int a,int b) // 這裡a,b 的地址和全域性main的 a,b地址不同 只是一個副本 修改是不會影響主函式

在c語言中,定義一個函式的形參和實參之間具體是如何進行引數傳遞的?

3樓:匿名使用者

函式中的形參和呼叫時的實參都是陣列名時,傳遞方式為( 地址傳遞 )

此時形參和實參共用同一段記憶體

都是變數時,傳遞方式為( 值傳遞 )

實參與形參互不影響

4樓:匿名使用者

主要有兩種:(1)值傳遞:在函式呼叫時,將實參的值複製一份傳遞到呼叫函式中,這樣,如果在呼叫函式中修改了引數的值,也不會影響到實參的值。

(2)引用傳遞:與(1)相反,即會影響實參的值。如何區分它們呢?

實際上,通常在定義函式時,如果引數為陣列、指標或引用型別時,函式採用引用傳遞,否則採用值傳遞。

5樓:匿名使用者

傳值呼叫和引用呼叫  傳值呼叫和引用呼叫指的是用於引數傳遞過程中的一種機制。傳值呼叫中,只使用了實參的值。傳值呼叫機制裡,形參是一個區域性變數,其初始值為相應實參的值。

在引用呼叫機制裡,將實參的地址傳遞給形參,從表面上看是以實參變數取代形參,因此任何發生在形參上的改變實際上都發生在實參變數上。

形參的作用是實現主調函式與被調函式之間的聯絡,通常將函式所處理的資料,影響函式功能的因素或者函式處理的結果作為形參。沒有形參的函式在形參表的位置應該寫void.main 函式也可以有形參和返回值,其形參也稱為命令列引數,由作業系統在啟動程式時初始化,其返回值傳遞給作業系統。

形參和實參的對照例項(c語言版)  main()    int s(int n)

c語言規定,呼叫一個函式時,實參變數和形參變數之間的資料傳遞方式是什麼 5

6樓:四舍**入

函式只有兩種傳遞方式:

1、值傳遞,又稱單向傳遞,只能把實引數值傳給形參 ,形參最後的結果不影響實參(形參改變大小 ,實參大小不變)。

2、址傳遞,通過指標,把實參的地址給形參,形參的大小可以影響實參。

7樓:匿名使用者

看到很多都說是值傳遞,本人認為只能由使用者指定傳遞方式。

在c語言中,軌道引數傳遞方式有兩種(其實還有引用傳遞):值傳遞和地址傳遞,也就是說可以值傳遞,也可以地址傳遞。至於到底採取什麼傳遞方式應該得有使用者根據形參型別來指定了。

比如 函式 int f( int *p) 此處接收的只能是地址型別

在主函式中定義變數 a =3; 此時實參a的值為3,很明顯 如果這種採用值傳遞方式呼叫 f(a)肯定不合適,

正確的應該是地址傳遞方式呼叫 f(&a) ,也許有些會說,地址也是值。但c明確的規定,實參的值和實參的地址是有本質區別的

故本人認為 傳遞方式只能由使用者根據 形參來指定傳遞方式。

8樓:

函式只有兩種傳遞方式 一個是值傳遞 一個是址傳遞 址傳遞 是指傳的是地址 也就是說 是以陣列過指標作為引數傳遞 而值傳遞傳的是 數 可以是整形的 也可以是實行的

9樓:匿名使用者

資料傳遞是「值傳遞」,即單向傳遞,只由實參傳遞給形參,而不能由形參傳回來給實參。

10樓:匿名使用者

實參向形參的資料傳遞是「值傳遞」,單向傳遞,只由實參傳給形參,而不能由形參傳回給實參

在c語言中,函式實參與形參之間的資料傳遞方式是( )傳遞方式。

11樓:八零後電影院

函式實參與形參之間的資料傳遞方式是( 值傳遞)傳遞方式,在c語言中,資料傳遞方式有值傳遞和引用傳遞,值傳遞:傳值,實際是把實參的值賦值給行參,相當於copy。

傳值呼叫中,只使用了實參的值。傳值呼叫機制裡,形參是一個區域性變數,其初始值為相應實參的值。在引用呼叫機制裡,將實參的地址傳遞給形參,從表面上看是以實參變數取代形參,因此任何發生在形參上的改變實際上都發生在實參變數上。

引用傳遞是將變數的記憶體地址傳遞給方法,方法操作變數時會找到儲存在該地址的變數,對其進行操作。會對原變數造成影響。可以將一個變數通過引用傳遞給函式,這樣該函式就可以修改其引數的值。

12樓:春雨_潤物

值傳遞。

實參與形引數據傳遞有兩種方式:值傳遞與地址傳遞。

地址傳遞的形式為 int &a=b;

也就是我們所說的引用,但引用只有c++中有,所以c語言都是值傳遞的。

有些人有誤解:認為c語言的int *p=&a;不也是按地址傳遞嗎?其實不是這樣的。

深入理解值傳遞與地址傳遞就會發現:

值傳遞是:把實參的值傳給一個變數(形參)。所以int *p=&a也是把a的地址值傳給了指標變數p

地址傳遞是:直接把地址傳進來,沒有賦給任何變數,這樣在函式體內對形參的操作也就是對實參地操作。有這種功能的也就是引用(&)了。

13樓:影碟思

實參拷貝一份給形參 形參如果是指標 則把實參地址賦給形參

c語言判斷題:在標準c語言中,函式引數傳遞是單向傳遞,即由實參傳遞給形參.

14樓:小莫喲

c語言中,舉個來例子swap(int a,int b)函式。你源的main(bai)函式中呼叫swap(x,duy)。是把x,y的值傳過

zhi去,傳給a,b後。x,y和

daoa,b的聯絡就斷了。所以叫做單向傳遞。

c++有一種方式叫做引用,例如:int &i=x; 可以理解為i是x的別名,地址還是相同的。這時候在swap()函式中,x,y是真正地參與到運算中去。

並把結果返**用函式。所以這個叫做雙向傳遞。

這是我的理解,如果不對,請見諒。

15樓:山水阿銳

值傳遞。

實參與形引數據傳遞有兩種方式:值傳遞與地址傳遞。版

地址傳遞的形式為 int &a=b;

也就是我權們所說的引用,但引用只有c++中有,所以c語言都是值傳遞的。

有些人有誤解:認為c語言的int *p=&a;不也是按地址傳遞嗎?其實不是這樣的。

深入理解值傳遞與地址傳遞就會發現:

值傳遞是:把實參的值傳給一個變數(形參)。所以int *p=&a也是把a的地址值傳給了指標變數p

地址傳遞是:直接把地址傳進來,沒有賦給任何變數,這樣在函式體內對形參的操作也就是對實參地操作。有這種功能的也就是引用(&)了。

16樓:匿名使用者

函式傳遞的是實參的複製

關於c語言 在c中呼叫函式時,只能把實參的值傳遞給形參,形參的值不能傳給實參。這句話對嗎?為什麼?

17樓:娛樂小八卦啊

不對,在c語言中,傳值有地址傳值和引數傳值,引數傳值只能將實參傳值給形參,所以a選項正確。c語言中的外部變數是可以在函式之間傳遞資料的。

c語言中的自動變數是預設的變數,實際上是函式中的區域性變數,所以d選項正確。全域性變數一經定義都是需要分配記憶體單元,在程式執行過程中自始至終都會佔用固定的空間,在未知記憶體情況下,最好不要使用全域性變數。

函式呼叫時,值可以雙向傳遞,並沒有限制使用全域性變數還是區域性變數,需要根據程式的邏輯需要進行選擇。

擴充套件資料

c語言引數傳遞:

1、值傳遞

引數傳遞只把變數a的值傳遞給了變數p,此時變數a與變數p是值相同的兩個不同變數,在記憶體不同的兩個地址中,所以對變數p賦值只是修改了變數p的值,並不能修改變數a的值。總結一句話就是:值傳遞不傳遞變數本身,只傳遞變數的值。

2、引用傳遞

與值傳遞不同,func的引數是int &p,表示引用傳遞。如輸出所示,通過引用傳遞,變數a的地址與變數p是相同的,也就是說引用傳遞把a的地址傳給了變數p,所以對變數p進行賦值之後,變數a的值也改變了,因為變數a與變數p實際是同一個變數。

3、指標傳遞

指標傳遞,顧名思義,int *p表明p是一個指標變數,呼叫func(&a)是把變數a的記憶體地址傳遞過去賦值給指標變數p,此時指標變數p的值是變數a的記憶體地址,故可看到輸出p為efbfde2c(變數a的記憶體地址)。

*p是對指標p的值(即變數a的記憶體地址)進行取值,相當於*&a,所以對*p進行賦值也就改變了變數a的值。

18樓:紅色老趙

實參是全域性變數,而形參是區域性變數.並且它們存放的地址也不一樣.

19樓:

不對,除了樓上所說的指標和陣列傳遞,還有一種情況就是引數分為入口引數和出口引數,二者區別在於入口引數在呼叫前必須被賦值,而後者在呼叫後才知道它的值,故出口引數是將形參的值傳給實參。(當然,出口引數一般為指標或陣列之類的)

20樓:炎二公子

比如定義

int f(int b) 這裡的b就是形參在呼叫的時候

我們寫 f(a) 這裡的a是本地變數,呼叫f的時候叫做實參在f(a)後,函式f裡的形參b的值是a賦予的,所以實參的值傳遞給形參這句話是對的

形參的值不能傳給實參這句話在嚴格意義上來說也是對的,比如,你在函式f(int b)裡面寫 b= 1000; 對於實參a來說並沒有任何影響。

但是,如果你的函式定義是指標,那麼函式可以改變指標上儲存的內容,但是不能改變指標本身。如果從這點考慮的話,實參是可以通過形參給改變的

21樓:

不對,你仔細看下書就知道為什麼了

在c語言中,用陣列名作為函式呼叫時的實參,實際上傳遞給形參的是____________。

22樓:足壇風行者

首地址。

因為陣列名傳遞的是陣列的地址也就是第一個元素的地址。例如:

a[3]這個陣列,3指個數,a[0]指第一個元素,全部元素指a[0]~a[2];那陣列名a規定的就是首地址。

擴充套件資料

c語言中函式引數傳遞的三種方式:

1、傳值,就是把你的變數的值傳遞給函式的形式引數,實際就是用變數的值來新生成一個形式引數,因而在函式裡對形參的改變不會影響到函式外的變數的值。

2、傳地址,就是傳變數的地址賦給函式裡形式引數的指標,使指標指向真實的變數的地址,因為對指標所指地址的內容的改變能反映到函式外,也就是能改變函式外的變數的值。

3、傳引用,實際是通過指標來實現的,能達到使用的效果如傳址,可是使用方式如傳值。說幾點建議:如果傳值的話,會生成新的物件,花費時間和空間,而在退出函式的時候,又會銷燬該物件,花費時間和空間。

23樓:匿名使用者

實引數組的首地復址。

在用數制組名作函式引數時,不是進行值的傳送,即不是把實引數組的每一個元素的值都賦予形引數組的各個元素。因為實際上形引數組並不存在,編譯系統不為形引數組分配記憶體,陣列名就是陣列的首地址,函式得到一個函式值,即為該字元陣列的首地址。

因此在陣列名作函式引數時所進行的傳送只是地址的傳送,也就是說把實引數組的首地址賦予形引數組名。形引數組名取得該首地址之後,也就等於有了實在的陣列。實際上是形引數組和實引數組為同一陣列,共同擁有一段記憶體空間。

在C語言中,當形參和實參都為指標時,在函式中傳遞的是地址嗎

是的,指標這玩意兒,就是專門和地址掛鉤的!這程式是你寫的嗎?要是你寫的話 你就看下面的三段話 就能找出。1.比如你定義一個函式void add int a,int b 這裡的a和b就是形參。2.當你進行函式呼叫的時候,add 1,2 這裡的1和2就是實參。3.形參就是沒有賦值的變數,實參就是有賦值的...

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

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

C語言實引數組與形引數組問題,關於c語言中陣列作為函式引數的函式之間呼叫問題

這個問題是這樣的了,因為你的陣列定義的是二維大小是20 20 地址空間已經分配好了,而但你輸入的m和n的值小於20的時候,你只是先給第一維賦值,如果輸入的數字大於20,在對第二維賦值,但你輸入一些小的m和n時,其實二維陣列你還沒有賦值,他們的值還是你預設給的0啊,而當你用二維陣列去讀數的時候 a 0...