C 高階程式設計三十四天 陣列作為引數

2021-07-03 15:19:03 字數 2179 閱讀 4685

陣列作為引數

陣列可以作為引數傳遞給方法,

也可以從方法中返回

.要返回乙個陣列

,只需要把陣列宣告為返回型別.

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...