【概念】
1、數組中的獨立變量:索引變量,下标變量或元素
2、方括号中的數字:索引或下标
3、數組的索引變量數目:聲明長度或數組長度
4、索引編号從0開始,結束于數組長度-1的整數
5、索引變量可以為任意類型,但同一數組的所有索引變量必然是同一類型(基類型)
6、方括号中的索引可以是整數常量,如int a[10];也可以是表達式(求值結果在0和數組長度-1之間),如int n=2;score[n+1]=10;
【聲明】
聲明數組時,數組長度可以使用已定義的常量
const int NUM=10;int score[NUM];//注意:數組長度不能使用變量!!部分編譯器不相容
【記憶體表示】
1、數組各索引變量的位置在記憶體中相鄰;
2、計算機僅記住索引變量a[0]的位址,通過元素的基類型占用的記憶體空間來計算其他索引變量的位址。
3、常見錯誤是引用不存在的數組索引,導緻記憶體溢出;
【初始化】
int num[3]={4,21,55};//提供的值少于數組長度,剩餘索引變量預設初始化為數組基類型的零值(建議主動初始化)。
【周遊】
int arr[]={3,5,9,14};
for(int x:arr){
cout<<x<<endl;
}
for(auto x:arr){
cout<<x<<endl;
}
【函數參數】
1、索引變量作為函數參數時,用法和普通變量一樣;
2、整個數組作為函數參數時,需在形參中指明數組長度(隻有數組首個索引變量的位址和基類型被傳遞),此時數組實參自動退化為同類型指針。
int getSize(int data[],int size);//size為數組長度,data[5]内的索引數字會被編譯器忽略
//以下為數組退化為指針示範
int getSize(int data[]){return sizeof(data);}
int data[] = {1,2,3,4,5};
cout<<sizeof(data)<<endl;//輸出20
cout<<getSize(data)<<endl;//輸出8,64位系統下指針長度為8位元組
注意:
1、實際調用函數時,提供的實參data不添加[]或索引表達式,如getSize(data,5);
2、數組形參為傳引用參數的弱型,作用于數組形參的任何操作都會作用于數組實參
3、常量數組參數用const修飾(通常隻修飾數組形參和類形參),數組任何值都不能被修改int getSize(const int data[],int size);
【常用算法】
1、順序搜尋
2、選擇排序
3、冒泡排序(較大值如同氣泡上浮,連續向數組末尾移動)
【二維數組】
二維數組可以轉換為對應的二維顯示,第一個索引代表行,第二個索引代表列。
int getSize(int data[][3],int size);
注意:
1、二維數組作為參數傳遞時,不指定第1維長度(索引數組被編譯器忽略),size用于辨別第1維長度
2、第1維(甚至更多元)是用于描述基類型,而基類型長度必須被指出!
【動态數組要點】
1、寫代碼時不指定數組長度,在運作時确定長度
2、數組變量本質是指針變量,指向數組的第一個索引變量
3、數組辨別符a可視為指針變量,且指針值不可修改!!
int a[5];int *p=addr;a=p;//非法!!
【動态數組聲明&銷毀】
int *p=new int[3];//通過new操作符建立
1、動态數組指針的指針類型和數組元素的指針類型是相同的
2、動态數組長度在[]中指出,如果缺失則由系統配置設定足夠大的存儲空間
3、delete []p;//銷毀動态數組所在的堆記憶體空間