以下是我在給學生講解數組時采用的ppt的大綱內容(粗體),由於本人知識上的欠缺,可能在很多知識點上把握不准,所以我會把我要給 學生講解的語句(不加粗)同時寫出,希望有路過我這份教案的人給予指點,如何能夠給可能只有c語言基礎知識的學生講解清楚,同時讓他們 理解其實際項目中的用法。
一:我們來認識數組,了解數組類型、學習定義及初始化
數組是同一數據類型的一組值
首先我 們將介紹幾個概念有助於你們理解數組。數組是一種具有相同類型和名稱的變量的集合,如一組整數、一組字符等。組成數組的這些變量被稱 為數組的元素,元素的個數也稱為數組的長度、數組的容量,容量一旦創建了,便固定了,此數組的元素個數也就不能增加或減少了。
每個數組元素都有一個編號,這個編號叫做下標,這個下標也稱為索引,一個有n個元素的數組,其索引是從0~n-1為止。索引以及容量這些數 組對象的特性,在數組對象創建的時候便固定了,當利用索引操作時,不可以超出定義的容量,以免發生數組索引超出界限的錯誤。
在 c語言中,數組也會存在索引越界的情況,但是在編譯時一般不會體現出來,可能會順利的通過,但是卻為你的程序帶來了隱患,如果用戶操作 不當,超出容量了,程序就會出現錯誤。VS就解決了這個問題,在編譯時發現越界就會報錯,將危險停留在編程階段,減少了程序的不穩定性 。
同學們現在是不是有點疑惑,為什麼要用數組來存放數據呢?我定義多個變量來存放數據不行嗎?用數組有什麼好處呢?
讓 我們用數組的下個特性來解釋吧!
數組屬於引用類型,存儲在托管堆內存中 ,指針在線程堆棧中。
引用類型的數值,會把在托管 堆中分配一塊專門的位置存放數據,然後在線程堆棧中存放著指向數據存儲的內存地址,因為數組是引用類型,這樣它增加、修改數組中的元 素都會按照索引將元素排列在一起,就像班級中學生的學號一樣,你按照學號(索引)就可以對學生的如成績、信息進行操作,你只需定義一 個數組變量,記住它的名字就可以方便進行各種你想達到的效果。不會像簡單數值類型那樣,你得記住班級每個學生的名字才能進行工作,修 改或刪除信息都不方便,而且他們的存放位置也不一定連續,這勢必會降低程序的效率,所以你可以利用數組,組織所要管理的數據,例如, 記錄按日、按月……消費的流水賬,記錄員工的工作效率等。
接下來,我們看一下數組的定義及初識化。
一維數 組的定義及初識化:
type[] arrayname={value1,value2,……,valueN}; //定義了數據類型同時賦值。
type[] arrayname=new type[N]{v1,v2,……,vN}; //使用new關鍵字定義同時賦值。此處的N可以省略,因為定義類型後已經賦了N個初 值。
在這裡第一次出現了new這個關鍵字,它是c#中很常用的,也是你們現在比較難理解的概念,你們現在只需要知道new的過程實際上 就是給數組在托管堆 中分配了一塊位置,用來存放數據就可以了,以後我們在學習到類時會專門講解。 接下來要看到的這種定義是我要強調 的。
數組元素初始化或給數組元素賦值都可以在聲明數組時或在程序的後面階段中進行。也就是說,你可以像下面的例子一樣,先定義 ,但這是要寫上N,告訴編譯器定義了N個元素。
type[] arrayname=new type[N]; //先定義N個元素
這種定義 後.net會先為數組中的每個元素根據類型賦予同一個默認值。如int型,便給每個元素賦值為0;string類型為“”。當你想對那個 元素進行操作時,就按照索引給它賦值。如:
arrayname[0]=value1; arrayname[N-1]=valueN;
type[] arrayname; //這種方法是將第二種定義方法拆分成兩步
arrayname=new type[N]{v1,v2,……,vN}; //此處的N也是可以 省略的,道理相同。
以上是我們很容易理解的一維數組,在介紹多維數組的定義時我們先來看看數組的類型。
數組依照其 維度結構進行分類。看一下這張圖,為方便我們賦值,所有的編號都是從0開始,和索引相同。
現在我們就像叫學生學號一樣,告訴他成績,用數組怎麼賦值呢?
看一維的圖片,現在我們叫1號學生起立, 告訴他成績是99分,用數組是這樣寫 :
int[] cj=new int[3];//先定義cj(成績),說明只有3個學生。
cj[1]=99;//1號索引 位的學生成績是99.
其他同學也可以這樣賦值。
看二維的圖片,現在我們叫0班2號學生起立,告訴他成績是88,用二維數組是這 樣表示:
int[,] cj=new int[3,3];//先定義[3行,3列]的二維數組變量cj(成績),說明有3*3個學生。
cj[0,2]=99;//行的 索引是0,列的索引是2的學生成績是88.也就是圖片的第1行第3列.
其他同學也可以這樣賦值。 在以後學習繪圖時會 用到這種用法。
看三維的圖片,現在我們叫3校1班2號學生起立,告訴他成績是77,用二維數組是這樣表示:
int[,,] cj=new int[3,3,4];//先定義[3行,3列,4高]的三維數組變量cj(成績),說明有3*3*4個學生。
cj[1,2,3]=77;//行的索引是1,列的索引是2, 高的索引是3的學生成績是77.也就是圖片的3校字上面的第2行最後一個成績.
其他同學也可以這樣賦值。 在做3d游戲的開發時 會利用到多維數組,定位物體移動的軌跡。
如果成績的范圍在擴大到區,就增加一維,擴大到市,就再增加一維。
實際是就是 用維數定義了點的空間,用索引定位了空間中點的位置。比如以前初中學習坐標軸,當a點行坐標x=3,縱坐標y=4時,a就可以用(3,4)來定 義,二維數組就是可以這樣理解。
理解了維的概念,我們來看一下多維數組的定義和初識化。和c語言不同,多維數組將維數都寫 “[]”裡,用“,”隔開。在c語言中定義二維數組如int a[][];在c#中一定不要搞混,因為它代表另一種數組類型:交 錯數組,我會在數組的第二節給你們講解。
int[,] array6 = new int[10, 10];
聲明數組時將其初始化
int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
提問:誰能告訴老師,上面這個定義[x ,y ]各是幾? 也就是說是幾行幾列的數組?答案:4行2列[4,2]
這樣的賦值老師這樣寫就比較直觀了:
int[,] array2D = new int[,] { { 1, 2 },
{ 3, 4 },
{ 5, 6 },
{ 7, 8 } };這樣就看容易看出每個位的值了。
int[, ,] array3D = new int[,,] { { { 1, 2, 3 } }, { { 4, 5, 6 } } };
聲明一個數組變量但先不將其初始化
int[,] array5;
也可以給數組元素賦值,例如:
array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK
//array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Error
array5[2, 1] = 25;
以上就是我們這一節要學習的知識點,我再將本節的重點強調一 下,同時復習。
索引是訪問數組成員的依據,值范圍是基於從0開始,到數組容量(元素個數、數組長度)-1結束不能超出或等於。
數組的容量是固定的,如果定義時沒有賦值,一定要定義數組個數,同時元素值是默認的。
數組對象存在很多類型,主要依其 維度結構進行分類。
數組是引用類型,根據地址傳遞值。
例如: int[] a ={ 1, 2, 3 };//定義一個a數組,元素值分別是1,2 ,3
int[] b=a;//定義一個b數組等於a。這是b在線程裡存放的是a元素在托管堆中存放的地址,也就是說b也指向a在堆中的元素值,不 會為b另開存儲空間,int [] b=new int[3];這種定義b的情況除外,new實際上就是給b在托管堆中另開了一塊位置,與a就無關了。
b [0] = 7;//改變b的0索引的元素值,看a數組中元素的值變化。
Console.WriteLine(a[0]);
Console.WriteLine(a[1]);
Console.WriteLine(a[2]);
結果改變是7,2,3。這就說明了如果有兩個數組間是相等的關系,改變一個數組的值,另一個也 會有變化。
下一節我們來學習交錯數組以及對數組數據的操作。