C 類以引數在方法中的傳遞問題

2021-04-29 07:26:38 字數 1014 閱讀 8867

今天研究了一下午的類以引數在方法中的傳遞問題

得出了一些結論(不知是否正確)

方法中傳遞引數分為兩種:

1:值傳遞

2:引用傳遞

這在值型別變數中體現相當明顯

值傳遞方法呼叫結束後引數值是不會改變的

引用傳遞方法呼叫結束後引數值隨方法內值的變化而變化的

因為值型別資料宣告後分配的空間是直接用來存值的

在呼叫方法時採用值傳遞,系統會直接copy乙份變數空間的內容給方法

值型別的空間本身就是值所以copy進去的是值的copy

方法內對值的copy進行處理,方法結束後值的copy釋放,所以原值沒改變

而採用引用傳遞,系統會拷貝變數空間的指標給方法

指標直接指向原變數的值

方法內對指標指向的原值進行處理,方法結束後釋放指標,所以原值改變

而類以引數傳遞就有相當大的問題

因為類本身分配的空間就是用來儲存指標,指標指向堆疊中例項化的類

在呼叫方法時採用值傳遞,系統copy變數空間的內容給方法

類的空間本身存放的是指向例項化類的指標

因此,如果在方法中的操作會分為兩種:

1是對指標操作(如:類例項1=類例項2)

這個操作表現的和值型別引數一樣方法結束後

類引數的指標copy被釋放,原指標沒改變

原指標指向的類例項也沒改變,操作完成類沒發生改變

2是對指標指向的例項化類的內部操作(如:類例項1.屬性1=某值)

這個操作的方法結束後

類引數的指標copy被釋放,原指標沒改變

原指標指向的類例項改變,操作完成類發生改變

採用引用傳遞後,系統copy變數空間的指標給方法

這時指標指向的空間還是指標

形成:指標指1向指標2,指標2指向類例項

方法不能對 針指1操作

可以對 指標2(如:類例項1=類例項2),類例項(如:類例項1.屬性1=某值)操作

會產生多個不同的結果

最後的結果表現為類的內容為指標最後指向的類例項的類屬性被操作後的結果

C在引數傳遞時遇到的問題

題目大概如下 void findqueen int count findqueen count int totalnqueens int n 1.findqueen 的引數傳遞 第一次呼叫,此時count為乙個值,用 將位址傳給函式,函式用指標儲存位址,在函式中count即為指標 位址 count為...

在C 中執行sql語句時傳遞引數的方法

c 中與資料庫打交道,免不了要用到各種sql語句,而給sql語句傳引數也是不可避免的。以下是我在此方面上的一點總結 高手勿見笑 1 直接寫入法 例如 int id 1 string name lui cmd.commandtext insert into tuserlogin values id n...

C 中的引數傳遞

c 中的引數傳遞,根據引數的型別可以分為四類 在預設情況下,clr方法中引數的傳遞都是按值傳遞 對於引數又分為 形參 被呼叫方法中的引數,實參 呼叫方法的引數 class program addnum就是形參,也就是被呼叫方法中的引數 private static void add int addn...