A. c語言 調用函數實參未變 為何
C語言整型、實型數據,如果以變數名稱作為參數,系統規定的處理方式就是:實際參數僅決定形式參數的初值,形式參數在子函數內部的操作與實際參數無關。
如果需要子函數內的操作能夠影響實際參數的內容,需要使用實際參數變數的地址做參數,使得子函數內部對於形式參數的操作能夠直接在實際參數的存儲空間內進行。你的子函數定義應該修改為:
int
max(int
*a,int
*b)
{
int
c;
if(*a>*b)
{
c=*a;
*a=*b;
*b=c;
}
}
函數的調用格式應該為:
max(&m,&i);
使用實參地址作為參數,與子函數指針類型的形式參數對應。
達到在子函數中通過實際參數地址,直接操作實際參數變數內容的目的。
B. 求指教:C語言中函數的值傳遞不是單向的嗎為什麼這個程序中最後實參的值變了
C語言中函數的值傳遞,確實是單向的,在這個程序中並沒有改變最後實參的值,因為它輸出的是形式參數的值。
C. C語言,函數調用中什麼情況時,形參的改變會影響實參改變,什麼情況下不影響
傳遞值的時候不影響實參
傳遞指針的時候能夠影響實參。
D. C語言中實參和形參是怎麼回事求詳細解答!!!
從
語法意義
上說,
形參
是
函數
內部為外部傳進來的
參數
取的名稱,而
實參
則是函數外部准備傳給函數的參數的名稱,這兩個是相對的從
內存
意義上說,形參是函數內的內存空間,實參是函數外的內存空間,每次調用都要將實參從函數外空間復制到函數內內存空間,因此改變形參的值對於實參一點影響也沒有。
形參:全稱為"形式參數"是在定義函數名和
函數體
的時候使用的參數,目的是用來接收調用該函數時傳如的參數.
實參:全稱為"實際參數"是在調用時傳遞個該函數的參數.
形參和實參的類型必須要一致,或者要符合隱含轉換規則,
當形參和實參不是指針類型時,在該函數
運行時
,形參和實
參是不同的
變數
,他們在內存中位於不同的位置,形參將實
參的內容復制一份,在該函數運行結束的時候形參被釋放,
而實參內容不會改變.
而如果函數的參數是指針類型變數,在調用該函數的
過程
中,傳個函數的是實參的地址,在函數體內部使用的也是
實參的地址,即使用的就是實參本身.所以在函數體內部
可以改變實參的值.
E. 在c語言中,不利用指針是不是就不能改變實參值
形參和實參的區別
形參出現在函數定義中,在整個函數體內都可以使用, 離開該函數則不能使用。
實參出現在主調函數中,進入被調函數後,實參變數也不能使用。
形參和實參的功能是作數據傳送。發生函數調用時, 主調函數把實參的值傳送給被調函數的形參從而實現主調函數向被調函數的數據傳送。
1.形參變數只有在被調用時才分配內存單元,在調用結束時, 即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。 函數調用結束返回主調函數後則不能再使用該形參變數。
2.實參可以是常量、變數、表達式、函數等, 無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。
3.實參和形參在數量上,類型上,順序上應嚴格一致, 否則會發生「類型不匹配」的錯誤。
4.函數調用中發生的數據傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函數調用過程中,形參的值發生改變,而實參中的值不會變化。
5.當形參和實參不是指針類型時,在該函數運行時,形參和實參是不同的變數,他們在內存中位於不同的位置,形參將實參的內容復制一份,在該函數運行結束的時候形參被釋放,而實參內容不會改變。
F. c語言fun函數的功能是交換形參的值,不能交換實參的值,都是按值傳遞為什麼不能改變實參的值
voidfun(int*a,int*b)
{
int*c;
c=a;a=b;b=c;
}
因為函數中,形參a,b中保存的都是實參的地址值,c=a;a=b;b=c;這行代碼,只是把形參a,b的地址值進行了互換,對調用函數的實參所保存的結果是沒有任何影響的。如果換成如下代碼:
voidfun(int*a,int*b)
{
intc;
c=*a;*a=*b;*b=c;
}
互換的是指針所指空間的值,即互換了調用函數的實參所保存的數值
G. C語言中實參和形參是怎麼回事求詳細解答!!!
從語法意義上說,形參是函數內部為外部傳進來的參數取的名稱,而實參則是函數外部准備傳給函數的參數的名稱,這兩個是相對的從內存意義上說,形參是函數內的內存空間,實參是函數外的內存空間,每次調用都要將實參從函數外空間復制到函數內內存空間,因此改變形參的值對於實參一點影響也沒有。
形參:全稱為"形式參數"是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳如的參數.
實參:全稱為"實際參數"是在調用時傳遞個該函數的參數.
形參和實參的類型必須要一致,或者要符合隱含轉換規則,
當形參和實參不是指針類型時,在該函數運行時,形參和實
參是不同的變數,他們在內存中位於不同的位置,形參將實
參的內容復制一份,在該函數運行結束的時候形參被釋放,
而實參內容不會改變.
而如果函數的參數是指針類型變數,在調用該函數的過程
中,傳個函數的是實參的地址,在函數體內部使用的也是
實參的地址,即使用的就是實參本身.所以在函數體內部
可以改變實參的值.
H. C語言調用函數後,為什麼實參的值沒有發生改變
你理解錯了
函數里的實質是 實 參 復 制 形 參
你上面s(m)對於函數int s(int x)來說.
函數內部里只是把m的值1傳給了x.然後x=2
x的值改變和m有什麼關系呢
要想改變m的話可以這么改寫函數
ints(int*p)
{
*p=2;
}
voidmain()
{
intm=1;
s(&m);
printf("%d ",m);
}
區別在於
第二個用的是地址.雖然也是復制形參,
但是他們是復制的是 地 址.
所以這里s(&m) 使得 &m等於p
&m和p都是地址,
那麼*p和m指的是同一個地址的值
所以*p=2本質也就是m=2
I. 一個C語言問題,請問為什麼無法改變實參的值
你的函數帶返回值,應該這么寫:
M=Function_A(M);
J. 為什麼c語言不能通過執行調用函數來改變實參指針變數的值
調用函數,只能改變指針指向的內存空間的內容,不能改變實參指針變數的值。
我覺得題主對指針變數,還算有一點了解。
指針變數,其實也就是一個變數,但它的值是一塊內存的地址。
函數調用時,你只是把實參指針變數的值,即一塊內存的地址,賦(復制)給了形參,然後,你在函數內把形參指針指向別的內存空間地址,與實參指針就無關了,實參指針還是指向原來的那塊內存空間。
另外,你把實參指針變數的值,賦(復制)給了形參,然後形參指針就能操縱這塊內存了,可以改變這塊內存的容。此時,實參指針指向的那塊內存的內容也就改變了,但實參指針的值還是函數調用前的那塊內存空間的地址。