C中關於引數按引用傳遞的問題,C 中的out引數呼叫方法的時候需要傳遞對應的值嗎?

時間 2022-07-13 00:40:03

1樓:匿名使用者

你的 這個方法:swap(textbox t1, textbox t2)

是交換好 變數後  又重新給文字框進行了賦值操作,當然文字框的值我們看到了改變!

再看你的這個方法:swap(textbox t1, textbox t2)

同時2個變數, 通過除錯,發現 ,

textbox t3 = new textbox();

t3 = t1;

t1 = t2;

t2 = t3;

物件的text值 是交換了,但是 你沒有重新對文字框指定賦值操作,所有文字框的值交換變數,必須重新賦值,才能看到我們想要的結果。

2樓:匿名使用者

public void swap(ref string s1, ref string s2) // 用 ref

呼叫:swap(textbox1.text, textbox2.text);

3樓:念念君子溫其如玉

public void swap(textbox t1, textbox t2)

是這個原因,控制元件通常不要直接賦值,這根陣列直接用另一個陣列定義並且初始化很相似,簡單的理解為,二者只開闢了一份記憶體。所以,無論修改哪一個,記憶體中的資料發生改變之後,另外一個控制元件或陣列也就隨之變化了

c#中 引用引數和輸出引數有什麼不同?他們以什麼方式傳遞?

4樓:

沒什麼太大區別。。

一個用關鍵字ref標示,一個用out標示。

牽扯到資料是引用型別還是值型別。

一般用這兩個關鍵字你是想呼叫一個函式將某個值型別的資料通過一個函式後進行更改。傳out定義的引數進去的時候這個引數在函式內部必須初始化。否則是不能進行編譯的。

ref和out 都是傳遞資料的地址,正因為傳了地址,才能對源資料進行修改。

一般情況下不加ref或者out的時候,傳值型別的資料進去實際上傳進去的是源資料的一個副本,也就是在記憶體中新開闢了一塊空間,這裡面存的值是與源資料相等的,這也就是為什麼在傳值型別資料的時候你如果不用return是無法修改原值的原因。但是你如果用了ref,或者out,這一切問題都解決了,因為他們傳的是地址。

out比起ref來說,還有一個用法就是可以作為多返回值來用,都知道函式只能有一個返回值,c#裡,如果你想讓一個函式有多個返回值,那麼out能很容易解決。

5樓:匿名使用者

引用引數以ref為關鍵字,這種引數是要在呼叫之前就初始化的。這引數一般情況下是從外部向內部傳遞數值的時候使用,對於託管**加ref和不加基本相同,但是對於託管**就有所區別。

輸出引數以out為關鍵字,這種引數不需要輸入確定的值,實際的物件是在方法內部初始化,由方法內部給這種引數賦值。一般是呼叫該方法之後,需要方法輸出一些資料的時候使用。因為有時候方法的返回值可能用作他用,而這時還想讓方法輸出其他的資料,就可以使用out引數了。

6樓:

引用引數:以關鍵字ref定義,採用引用傳遞

輸出型引數:以關鍵字out定義,採用引用傳遞,其實參可以不進行初始化

c# 中的out引數呼叫方法的時候需要傳遞對應的值嗎?

7樓:給世界一些震撼

out 關鍵字會導致引數通過引用來傳遞。這與 ref 關鍵字類似,不同之處在於 ref 要求變數必須在傳遞之前進行初始化。若要使用 out 引數,方法定義和呼叫方法都必須顯式使用 out 關鍵字。

例如:class outexample

static void main()

}儘管作為 out 引數傳遞的變數不需要在傳遞之前進行初始化,但需要呼叫方法以便在方法返回之前賦值。

ref 和 out 關鍵字在執行時的處理方式不同,但在編譯時的處理方式相同。因此,如果一個方法採用 ref 引數,而另一個方法採用 out 引數,則無法過載這兩個方法。例如,從編譯的角度來看,以下**中的兩個方法是完全相同的,因此將不會編譯以下**:

class cs0663_example

public void samplemethod(ref int i)

}但是,如果一個方法採用 ref 或 out 引數,而另一個方法不採用這兩類引數,則可以進行過載,如下所示:

class refoutoverloadexample

public void samplemethod(out int i) }備註

屬性不是變數,因此不能作為 out 引數傳遞。

有關傳遞陣列的資訊,請參見使用 ref 和 out 傳遞陣列。

示例當希望方法返回多個值時,宣告 out 方法很有用。使用 out 引數的方法仍然可以將變數用作返回型別(請參見 return),但它還可以將一個或多個物件作為 out 引數返回給呼叫方法。此示例使用 out 在一個方法呼叫中返回三個變數。

請注意,第三個引數所賦的值為 null。這樣便允許方法有選擇地返回值。

class outreturnexample

static void main()}

c#中值傳遞 和引用傳遞的區別在** 什麼是值專遞 什麼是引用傳遞 來個簡單點的 謝謝

8樓:匿名使用者

值傳遞是傳內容,引用傳遞是傳指標,完畢。

9樓:匿名使用者

這些都是針對方法而言的。

值傳遞指的是方法被呼叫時傳遞進來的引數是一個副本(拷貝),而不是傳遞進來引數本身。換句話說對值傳遞引數的修改不會影響到呼叫方傳遞的引數物件;

而引用傳遞指的是方法被呼叫時傳遞進來的引數是一個引用,換句話說傳遞進來的引數是指向呼叫方傳遞的引數本身的。對引用傳遞的引數的修改會影響到呼叫方傳遞的引數物件。

給個**:

public void 引數值傳遞方法(int i)public void 引數引用傳遞方法(ref int i)然後呼叫的 main 方法:

public static void main(string args)

", a);

引數引用傳遞方法(a);

console.writeline("a = ", a);

}輸出結果如下:

3010

c# 中的out引數呼叫方法的時候需要傳遞對應的值嗎?

10樓:給世界一些震撼

out 關鍵字會導致引數通過引用來傳遞。這與 ref 關鍵字類似,不同之處在於 ref 要求變數必須在傳遞之前進行初始化。若要使用 out 引數,方法定義和呼叫方法都必須顯式使用 out 關鍵字。

例如:class outexample

static void main()

}儘管作為 out 引數傳遞的變數不需要在傳遞之前進行初始化,但需要呼叫方法以便在方法返回之前賦值。

ref 和 out 關鍵字在執行時的處理方式不同,但在編譯時的處理方式相同。因此,如果一個方法採用 ref 引數,而另一個方法採用 out 引數,則無法過載這兩個方法。例如,從編譯的角度來看,以下**中的兩個方法是完全相同的,因此將不會編譯以下**:

class cs0663_example

public void samplemethod(ref int i)

}但是,如果一個方法採用 ref 或 out 引數,而另一個方法不採用這兩類引數,則可以進行過載,如下所示:

class refoutoverloadexample

public void samplemethod(out int i) }備註

屬性不是變數,因此不能作為 out 引數傳遞。

有關傳遞陣列的資訊,請參見使用 ref 和 out 傳遞陣列。

示例當希望方法返回多個值時,宣告 out 方法很有用。使用 out 引數的方法仍然可以將變數用作返回型別(請參見 return),但它還可以將一個或多個物件作為 out 引數返回給呼叫方法。此示例使用 out 在一個方法呼叫中返回三個變數。

請注意,第三個引數所賦的值為 null。這樣便允許方法有選擇地返回值。

class outreturnexample

static void main()}

11樓:匿名使用者

out 引數傳遞的變數不必在傳遞之前進行初始化,但被呼叫的方法需要在返回之前賦一個值。

c#中物件最為引數的傳遞是是引用還是拷貝??

12樓:匿名使用者

這個不管從裡面表面看都是按引用傳遞,在dataadapter.fill(...)方法中會對ds進行資料填充,如果按值傳遞,那就是複製了,那你的ds就填充不了任何資料了,填充的只是一個副本,而這個副本在fill完成後就等著被gc掉,那就毫無意義了。

13樓:

c#中有兩種資料,一是引用型別,一是值型別。引用型別做引數的時候傳遞的是引用,值型別傳遞的是拷貝

14樓:匿名使用者

1樓正解

從原理來看:

關鍵是看變數是存放在**的,如果是存在堆裡的,就是引用型別,如果是存在棧裡的就是值型別,

從最簡單的角度來看,

這也是我剛開始學習的思考方式,

可以賦值為null的就是引用型別,反之,就是值型別。

15樓:匿名使用者

應該是引用傳遞吧。 dataset是引用型別來的

c#中用了ref就是引用傳遞?

16樓:匿名使用者

對啊ref 關鍵字使引數按引用傳遞。其效果是,當控制權傳遞**用方法時,在方法中對引數所做的任何更改都將反映在該變數中。若要使用 ref 引數,則方法定義和呼叫方法都必須顯式使用 ref 關鍵字。

c程式設計中,,陣列做引數的傳遞問題

這個問題其實我也糾結過很久,後面看了很多人的理解和書上說的,下面是自己的理解哦,樓主可以參考下!如說得不好,還請提出來,自己好改正!陣列做引數,傳遞的陣列的首址,從根本上來說已經不再是一個陣列,而是一個陣列副本的變數,這就好比我們經常寫的一個swap函式一樣,要交換兩個數,直接為swap a,b 是...

C陣列的引用做函式引數怎麼寫,c 中關於陣列作為函式引數的幾種方法

陣列名作函式引數 陣列名可以作函式的實參和形參。如 12 3456 78910 11main f int arr,int n array為實引數組名,arr為形引數組名。在學習指標變數之後就更容易理解這個問題了。陣列名就是陣列的首地址,實參向形參傳送陣列名實際上就是傳送陣列的地址,形參得到該地址後也...

C語言「檔案包含處理」中的引數傳遞問題

雖然在標頭檔案中和正常的程式檔案中的 沒有本質區別,但是強烈不建議你把實現 放在標頭檔案中,標頭檔案中一般只適合放需要對外界透露介面的函式宣告,公有預編譯定義 define 結構體以及類的宣告 非實現 公共型別 typedef 公共列舉 enum 這麼做的原因就是防止樓主所說的問題發生。在.c檔案中...