陣列作為引數
陣列可以作為引數傳遞給方法,
也可以從方法中返回
.要返回乙個陣列
,只需要把陣列宣告為返回型別.
static void main(string args)
int array = ;
printarray(new int );
printarray(array);
static void printarray(int arr)
foreach (var item in arr)
console.writeline(item);
console.readkey();
返回乙個陣列:
static void main(string args)
int array = getarray(new int );
foreach (var item in array)
console.writeline(item);
console.readkey();
static int getarray(int arr)
return arr;
陣列協變
陣列支援協變,
這表示陣列可以宣告為基類
,其派生型別的元素可以賦予陣列元素.例如
,可以宣告乙個
object
型別的引數
,給它傳遞乙個
person;
注意:陣列協變只能用語音與型別
,不能用於值型別.
陣列協變有乙個問題,
它只能通過執行時異常來解決
.如果把
person
陣列賦予
object
陣列,object
陣列就可以使用派生自
object
的任何元素.例如
,編譯器允許把字串傳遞給陣列元素
,但因為
object
陣列引用
person陣列,
所以會出現乙個執行時異常.
arraysegment
static void main(string args)
string array = ;
//將該陣列放到
arraysegment
arraysegmentarraystr = new arraysegment(array);
//只能用
for輸出
,不能使用
foreach
for (int i = arraystr.offset; i < (arraystr.offset+arraystr.count); i++)
console.writeline(" : ",i,arraystr.array[i]);
//選取陣列中的一段
,從下標為
1的元素開始,取
3個.選取的結果為下標為
1,2,3
的元素
//arraysegmentsubarray = new arraysegment(array, 1, 3);
console.readkey();
多個arraysegment
例項可以引用同乙個原始陣列
,從而可能發生重疊
.array
屬性返回整個原始陣列
.而不是該陣列的副本.
所以使用: arraystr.array[2] = "hahaha";
陣列是變成:zhangsan lisi hahaha zhaoliu
應用:arraysegment
可以用在記憶體碎片較多的地方
,來減少記憶體碎片的產生
,以便使記憶體碎片更有序
,提高我們的程式效能.
比如socket.beginreceive
非同步接收頻繁的時候,我們並不知道要接受的這個
buffer
長度,所以就預先設定乙個固定值,這時候這塊記憶體就會被
pin住,一直等到網路硬體接收到資料完成為止,這往往比較容易產生碎片,如果你用
windbg
一看,!dumpheap -type free -stat
會有很多
objects
但是值都是
0.所以可以用
arraysegment+stack
來解決
C語言第十四天 陣列指標與函式指標
把陣列當作引數傳入函式時 在這個函式中修改陣列中的值 在原函式中列印這個陣列 會發現值已經被修改 原因是 作業系統會為了節省記憶體而直接去運算元組的原位址 陣列指標 定義 型別 識別符號 陣列的列數 int a 2 4 int p 4 p a 與 p的區別 int a 2 4 int p p a 在...
C 高階學習第十四天
1.用來擴充套件已經定義型別的方法成員。為現有的型別新增方法 2.在靜態類中擴充套件方法,至少有乙個引數,這個引數前加this,this後邊是要擴充套件的類物件 3.不同的封閉泛型,擴充套件的方法也不一樣 1.擴充套件自定義類的方法 public class person public int ag...
C 程式設計 用指標變數作函式引數接收陣列位址
1 include 2 using namespace std 34 void select sort int p,intn 5 17 18 19 2021 void select sort1 int p,int n 2234 35 36 3738 void printf int p,int n 3...