【C++】構造資料型別--陣列
陣列是一組在記憶體中一次連續存取的,具有同一型別的資料變數所組成的集合體,它在記憶體中佔用一段連續的空間。其中的每個變數成為陣列元素,屬於同一資料型別,陣列元素用陣列名與帶方括號的陣列下標一起標識。談陣列,我們從四個方面談起。陣列的定義,初始化,存取,陣列地址的求得。而陣列可以是一維陣列,二維陣列和多維陣列,我們從最基本的一維陣列說起,其他維陣列通過一維陣列可以推得。
一.一維陣列
1.陣列定義
資料型別相同的簡單變數和陣列可以一起定義。 例如:Int x,a[20]
定義陣列時,還可以用型別定義typedef為陣列型別取一個名字,格式為:
typedef 資料型別 陣列名[常量表示式];
typedef int A[5]; //A是一個型別名,陣列型別;
A b[5]; //b是陣列物件;
2.陣列初始化
在函式中定義陣列時,沒有初值表,不被初始化,值為隨機值。
在函式外定義陣列,沒有初始化,陣列元素值為0
定義陣列,編譯器必須知道陣列的大小,為整個陣列分配適當大小的記憶體,陣列元素個數一定是常量表示式。
3.陣列存取
存取陣列元素
陣列元素(陣列名+下標標識)稱為下標變數,它可以 像簡單變數一樣參與運算。
格式: 陣列名[下標表示式];
下標表示式可以使變數表示式,標識陣列元素,不同於定義陣列時確定陣列長度的常量表示式。
陣列的下標從0開始;
讀取陣列元素地址
4.陣列的地址
陣列記憶體中分配一塊連續的儲存空間,從第一個元素開始依次存放。陣列在記憶體中的排列方式,如圖
陣列元素的地址通過陣列名來讀取,陣列名是一個地址常量,是陣列在記憶體中的起始地址。
格式為:陣列名+整形表示式。
地址不是實際的地址值,只表示了相對於起始地址的位置,稱為符號地址表示式。
如圖上:a+5 表示陣列中元素a[5]的符號地址。
實際地址值的求法:陣列的符號地址表示式a+n所表達的地址是第n+1個元素a[n]的地址。
實際地址值為:a+n*sizeof(資料型別)
5.陣列複製
陣列名是一個地址常量,不能作為被賦值物件。所以不能將一個陣列整體複製給另外一個陣列。
通過for迴圈對應的元素進行復制
for(i=0;i<5;i++)
a[i]=c[i] //將陣列c中元素的值複製到陣列c的對應元素中
使用Memcpy函式進行記憶體位元組複製,格式為
Memcpy(目標地址,源地址,位元組數);
例如:Memcpy(c,a,sizeof(a)); //將陣列a 複製到c中。
二.二維陣列
二維陣列是在一維陣列的基礎上,增加了一維。我們通過一幅圖,看看二維陣列在記憶體中的排列順序。
先順序排列每個一維元素,構成一維陣列;再將各個一維陣列順序排列,構成二維陣列。
int M[2][3]為例
先將3個int元素排列組曾兩個一維陣列M[0],M[1]。
M[0]:M[0][0],M[0][1],M[0][2]
M[1]:M[1][0],M[1[1],M[1][2]
再將兩個一維陣列排列成一個二維陣列
M:M[0],M[1]
總結:
陣列是一種構造資料型別,表示同一型別資料的集合,在記憶體中連續的存放,陣列名是一個地址常量,陣列的起始地址。陣列接觸了很長時間了,一直感覺複雜,不容易理解,不願意接觸。在C++的學習中,感覺到終於從量變到了質變,對陣列有了新的認識。程式語言的類似性,決定了每一種語言都有同樣的知識,不同的時間,不同的角度,總會明白的。
相關文章
- 【C++】資料型別-列舉型C++資料型別
- php資料型別之陣列PHP資料型別陣列
- Go 常見資料型別-01陣列Go資料型別陣列
- Golang 基礎-資料型別-陣列和切片Golang資料型別陣列
- NumPy 陣列切片及資料型別介紹陣列資料型別
- C++資料型別C++資料型別
- 陣列轉json後的資料型別問題陣列JSON資料型別
- TypeScript 陣列型別TypeScript陣列型別
- 資料結構-陣列資料結構陣列
- 資料結構 - 陣列資料結構陣列
- 資料結構之真別多想—樹狀陣列資料結構陣列
- Numpy學習-Task01-資料型別&陣列建立資料型別陣列
- 資料結構之「陣列」資料結構陣列
- 資料結構之陣列資料結構陣列
- 資料結構2——陣列資料結構陣列
- C++順序結構(3)、資料型別_____教學C++資料型別
- C++資料結構-佇列C++資料結構佇列
- C++檢視資料型別C++資料型別
- C# 一維陣列如何快速實現陣列元素的資料型別的轉換?C#陣列資料型別
- 演示 資料型別 陣列名[]=new 資料型別[大小],迴圈輸入5個成績,儲存到double陣列,並輸出資料型別陣列
- mysql 5.7 json 型別 json 陣列型別 普通字串型別 10w資料 查詢速度差異MySqlJSON型別陣列字串
- Java版-資料結構-陣列Java資料結構陣列
- LeetCode之資料結構——陣列LeetCode資料結構陣列
- JS資料結構(一)——陣列JS資料結構陣列
- JavaScript資料結構01 - 陣列JavaScript資料結構陣列
- 資料結構——樹狀陣列資料結構陣列
- Java版-資料結構-佇列(陣列佇列)Java資料結構佇列陣列
- 資料結構複習-01enum列舉型別資料結構型別
- JavaScript資料結構之陣列棧佇列JavaScript資料結構陣列佇列
- C++ 列舉型別介紹C++型別
- js實現資料結構--陣列JS資料結構陣列
- 基礎資料結構之陣列資料結構陣列
- pyspark 解析kafka陣列結構資料SparkKafka陣列
- 玩轉資料結構之陣列資料結構陣列
- java基礎(十) 陣列型別Java陣列型別
- PostgreSQL 陣列型別使用詳解SQL陣列型別
- 資料結構之陣列和矩陣--矩陣&不規則二維陣列資料結構陣列矩陣
- 詳解資料結構中的“陣列”與程式語言中的“陣列”的區別和聯絡資料結構陣列
- C語言 列舉資料型別C語言資料型別