1. c語言判斷題:在標准C語言中,函數參數傳遞是單向傳遞,即由實參傳遞給形參.
C語言中,舉個例子swap(int a,int b)函數。你的main()函數中調用swap(x,y)。是把x,y的值傳過去,傳給a,b後。x,y和a,b的聯系就斷了。所以叫做單向傳遞。
C++有一種方式叫做引用,例如:int &i=x; 可以理解為i是x的別名,地址還是相同的。這時候在swap()函數中,x,y是真正地參與到運算中去。並把結果返回調用函數。所以這個叫做雙向傳遞。
這是我的理解,如果不對,請見諒。
2. c語言第三題 不存在雙向么 值傳遞是單向 地址傳遞呢
C里只有所謂"值傳遞",即形參是實參的副本,這一方式,所謂的"址傳遞"依舊是"值傳遞",只不過傳遞的值是地址而已,形參的改變依舊無法改變實參本身
只有引用才可以做到雙向,而C里是沒有引用的
3. C語言簡單判斷題:在標准C語言中,函數參數傳遞是單向傳遞,即由實參傳遞給形參.
值傳遞。
實參與形參數據傳遞有兩種方式:值傳遞與地址傳遞。
地址傳遞的形式為
int
&a=b;
也就是我們所說的引用,但引用只有c++中有,所以c語言都是值傳遞的。
有些人有誤解:認為c語言的int
*p=&a;不也是按地址傳遞嗎?其實不是這樣的。
深入理解值傳遞與地址傳遞就會發現:
值傳遞是:把實參的值傳給一個變數(形參)。所以int
*p=&a也是把a的地址值傳給了指針變數p
地址傳遞是:直接把地址傳進來,沒有賦給任何變數,這樣在函數體內對形參的操作也就是對實參地操作。有這種功能的也就是引用(&)了。
4. c語言,關於形參實參單向值傳遞!
分兩種情況給你對比一下
函數形參用普通變數,當函數被調用的時候,實參的值被賦值給了形參,函數被調用的時候開辟了內存空間給形參,也就是數據被復制了,然後函數開始處理形參的數據,這個時候和實參的數據是沒有任何關系了。當函數結束的時候形參的內存空間是要被釋放,或者說刪除的,所以對實參啥也沒干,只是拿了實參的數據復制了一份,然後對復制的那一份算的很起勁,結果最後刪除了,啥也沒干。
函數形參用指針,當函數被調用的時候,實參指針,也就是把地址復制了一份給形參,但是函數中我們用取內容符號'*'對形參指針所指的內容,同時也是實參指針所指的同一份內容進行處理,函數結束的時候形參指針的值是被釋放了,可是形參指針,同時也是實參指針所指的內容還在。
感覺講的蠻清楚了,不懂再追問。
5. C語言中函數間的參數傳遞本質是單向的變數拷貝是什麼意思這個程序中的函數為什麼沒用
函數間的參數傳遞本質是單向的變數拷貝 這句話值傳遞函數的參數傳值是把當前變數拷貝一份然後傳進函數使用,函數中對參數進行的改變不會影響函數外部的變數。
如果需要改變,使用指針傳遞參數,這樣傳遞的是變數的地址,而不是變數值的拷貝。
swap(int x, int y)沒有起到交換的作用就是像上邊所說:
在main函數中a=3;b=4;然後swap(a,b);此時進入swap的a,b是重新聲明了兩個變數,分別是a,b的拷貝。也就是x=a;y=b;然後在函數中進行交換只是交換了x,y的值,對於函數外的a,b根本沒起到作用
6. C語言,函數參數傳遞方式是單向的,形參不能給實參賦值是什麼意思 自定義一個函數最後用return
實參把值傳給形參以後就和形參切斷聯系了,對形參操作後得到的是副本。c語言是嚴謹的,一個地址對應唯一的參數,但同一個參數可能有不同的地址 拿經典的swap交換函數舉例 如果你交換的不是指定地址的變數 只是普通變數 那麼他給你返回的結果就是你給的變數的副本的交換 而當交換對象變成指定地址的對象的時候 就有唯一性了 這是真正的交換
拿現實生活舉例 讓張三和李四交換他們的妻子 天啊你怎麼知道是哪個張三哪個李四?為了不影響其他的張三李四,只好新建一個張三和李四的副本來交換了 這個就叫嚴謹 所以必須知道他們二人的明確地理位置 才能交換他們的妻子 實現真的交換
7. C語言函數調用參數傳遞的是什麼
分兩種,一種是按值傳遞,一種是按地址傳遞,
按值傳遞就是在子函數中開辟出一個臨時內存空間,將傳遞的數值保存在這個空間中,當子函數結束後,這個內存空間就會釋放了!
按地址傳遞則是把主函數開辟的某個內存空間首地址傳遞給子函數,子函數可以直接讀寫主函數上這段內存空間,當子函數結束後,這部分空間不會被釋放,主函數將繼續使用這段空間!
8. c語言,難道地址傳遞不是雙向傳遞嗎
地址傳遞不是雙向傳遞。
c/c++ 語言的 地址傳遞 和 數值傳遞 的概念 很困惑人,學的時候貌似記住了,用的時候又會搞混。
要記住的是,想把 函數運算 結果 的 值 帶回來,
(1) 對應 的 形參 必須 用 指針 (有星號)。
(2)函數里要賦值。(有星號)。
例如, 交換 a,b 的數值:
void f(int *a, int *b) // 形參 用 指針
{
int t;
t = *a; *a=*b; *b=t; //賦值
}
-----------
題目里,k=a; a=b; b= k; 是函數里 交換地址/賦地址
不符合 「函數里要賦值」,所以不能帶回新值
(在函數里,你若列印, a,b 的值,好像交換了,實際上 不能 帶回 到 調用語句處。)
9. c語言中,實參向形參傳遞時,什麼時候用單向值傳遞,什麼時候用地址傳遞
C語言在形參和實參之間傳遞的不僅是值傳遞,也包括地址傳遞的。
細節如下:
C語言函數參數傳遞包括按值傳遞和按地址傳遞兩種;
當形式參數是數組、指針時都是使用的按地址傳遞。