關於實參和形參的值轉換問題,實參和形參什麼條件下不能進行型別轉換

2023-01-25 11:25:34 字數 3741 閱讀 4235

1樓:手機使用者

對於陣列型別的引數,實際上傳的是陣列的首地址,因此它是一個地址傳遞而不是值傳遞,值傳遞和地址傳遞我舉個例子就比較好理解:有一個抽屜裡面放著一個蘋果,這個抽屜相當於是一個住址(也就是地址),蘋果相當於該地址中的一個值;如果你傳入一個值,相當於把這個蘋果克隆了一個給函式,這個時候函式無論怎麼處理,這個抽屜裡的蘋果是沒變化的;而地址傳遞相當於你給了別人一個抽屜,函式把這個抽屜裡的東西變化了還給你這個抽屜,裡面的東西也變化了。。。。實際上這個題目要理解的是值傳遞和地址傳遞的區別

2樓:風花雪月

int aa[10]; sub(i,aa); 這裡aa是陣列指標。一個指標傳遞過去,在被呼叫函式裡是可以用指標來修改所指向的內容的。 所以傳遞的實參是aa,形參也沒有將aa改變。

但是aa指向的陣列裡的元素內容aa[0], aa[1], aa[2]等等這些改變了。 就是這兩句話改變的: if(t>=10) else uu[n]=t; 這就是指標的作用。

c語言題目形參與實參不一致為什麼?

3樓:聽不清啊

在值傳遞的過程中發生了「強制型別轉換」。最後輸出的w的值為4+16=20.0

總共發生了6次「強制型別轉換」。

4樓:匿名使用者

w=f2(2.1,4.0)是強制轉換成 int f2(2,4)

執行a=f1(2)時向精度高的型別轉換 int f1(2.0) 返回值強制轉換為int

return a+b 同理int轉換成高精度型別double

5樓:匿名使用者

實參和形參不一致時,實參按照形參的型別,進行了預設轉換了。

怎麼知道形參的改變對實參值有沒有影響,如下面三道題,看答案不明白,求大神賜教

6樓:金色潛鳥

它是指在函式體裡,若形參指向的地址發生變化,地址發生變化後發生的值的改變,不會通過實際引數帶回去。 若形參指向的地址沒有發生變化,這時 形參指向的值發生變化,那麼變化後的值,能通過 實際引數 帶回去。

例如:void sp(int *a)

執行主函式,int k=3; 初值

sp(&k); 呼叫

printf("%d",k); 呼叫後輸出 6

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

7樓:匿名使用者

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

8樓:匿名使用者

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

9樓:

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

10樓:匿名使用者

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

11樓:

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

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

#include "stdio.h"

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

12樓:匿名使用者

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

13樓:

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

14樓:匿名使用者

形參和實參的區別

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

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

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

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

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

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

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

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

實參和形參什麼條件下不能進行型別轉換?

15樓:匿名使用者

引數的傳遞就像賦值操作,所以跟賦值操作類似分析

16樓:匿名使用者

系統不支援的隱式轉換就不行吧,我覺得struct轉class就不行

17樓:懷舊黑白底片

真心不懂你問的什麼意思。。。

c語言的問題(關於形參和實參的賦值問題)

18樓:樂vov樂

呼叫函式有2種方式,傳值和傳地址。

傳值,就是你現在程式中的呼叫方式,這樣不能夠改變傳遞進來實參的值。

傳地址,就是形參是引用或者是指標,這樣才能改變傳遞進來實參的值。

這就是區別。

19樓:抬頭望那蒼穹

在這裡面,形參就是x和y,實參就是a和b。呼叫函式並不會改變引數的值,所以a和b沒有改變。你說的對,通過指標就可以了。可以通過指標改變指向的地址的方式來改變值

20樓:

void swap(int &x,int &y)

21樓:匿名使用者

形參是呼叫函式中的變數,與主函式中的變數並不相同,他有自己的儲存空間,所以在交換時是對swap裡的xy進行交換並沒對主函式的實參進行改變,

形實結合可以這樣理解:

如果形參是變數,那你的為例 只是進行賦值 x=a;y=b;

如果是引用 那麼 x就是a,,y就是b;

如果是指標 那麼 x指向a; y指向b;

所以指標和引用是可以的;

可以嘗試一下 函式變為 void swap(int &x,int &y) 就可以了;

或者: void swap(int*x,int *y)這樣也可以;希望可以幫到你;

c語言中的基本資料型別作為實參時,它和對應的形參之間資料傳遞方式為數值傳遞?形參值改變影不影響實參

22樓:房子a房子

對,c語言函式呼叫過程中的引數傳遞過程是值傳遞過程,形參在函式執行完畢後即被銷燬,實參的值不會被改變。若想使用函式修改實參的值,可以使用指標或者引用的方式宣告函式引數

23樓:

由實參傳給形參,再由形參傳回給實參

地址傳遞

單向值傳遞

由使用者指定傳遞方式

結構體的形參和實參是怎麼傳遞的

include include struct student void fun struct student person 和一般的程式一樣也要改成指標 int main fun zhang 取結構體地址printf ld,s,6.11f zhang.num,zhang.name,zhang.mon...

C 中,當形參是指標,實參是什麼

你這第一個和第二個有什麼不一樣的麼,就是把temp換成了p。第一個和第二個都不會有變化,第三個會交換。要理解指標和指標變數的含義,我們平時說的指標,一般指的就是指標變數。指標變數也是變數,它的值也會變化。指標變數儲存的是一個記憶體地址。函式呼叫的過程中,先要把實參複製給形參,如果引數是指標型別,那麼...

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

函式中的形參和呼叫時的實參都是陣列名時,傳遞方式為 地址傳遞 此時形參和實參共用同一段記憶體 都是變數時,傳遞方式為 值傳遞 實參與形參互不影響 主要有兩種 1 值傳遞 在函式呼叫時,將實參的值複製一份傳遞到呼叫函式中,這樣,如果在呼叫函式中修改了引數的值,也不會影響到實參的值。2 引用傳遞 與 1...