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...