Hi!冒險者😎,歡迎闖入 C 語言的奇幻異世界🌌!
我是 ankleless🧑?💻,和你一樣的闖蕩者~ 這是我的冒險筆記打怪升級之路——C語言之路📖,里面有踩過的坑🕳、攢的技能🌟、遇的驚喜🌈,希望能幫你少走彎路?。
愿我們在代碼山巒?各自攀登,頂峰碰拳👊,共賞風景呀!🥳
目錄
1. 數組的概念
2. 一維數組
2.1 一維數組的創建
2.2 一維數組的初始化
2.3 一維數組的類型
2.4 一維數組下標
2.5 一維數組元素的輸入和輸出
2.6 一維數組在內存中的存儲
2.7 sizeof操作符
3. 二維數組
3.1 二維數組的概念
3.2?二維數組的創建
3.3 二維數組的初始化
3.3.1 不完全初始化
3.3.2 完全初始化
3.3.3 按照行初始化
3.3.4 初始化的省略
3.4 二維數組下標
3.5 二維數組的輸入和輸出
3.6 二維數組在內存中的存儲
1. 數組的概念
數組是一組相同類型元素的集合,他是一種數據結構,用于按順序存儲相同類型的多個數據元素
數組中存放的是一個或者多個數組,但是數組中元素的個數不能為0;
數組中存放的多個數據的類型是相同的。
數組分為一維數組和多維數組,多維數組一般比較多見的是二維數組。
2. 一維數組
2.1 一維數組的創建
我們常常使用下列的代碼來創建一個簡單的一維數組:
type arr [數值常量];
type 為元素類型
arr 為數組名稱
存放在數組中的值稱為數組的元素,數組在創建的時候可以指定數組的大小和數組的元素類型。
type指的是數組中存放數據的類型,可以是:char、short、int、float等,也可以是自定義的類型,如結構體;
arr指的是數組名的名字,這個名字我們可以根據數組在程序中的作用進行命名,增強代碼可讀性;
[ ]中的常量值用來指定數組的大小,這個數組的大小是根據實際需求指定的,一經創建,他的內存空間就是固定的,這種方法也被稱為靜態定長數組的創建。
比如:我們希望存儲10次模擬考試的成績,我們可以創建如下數組:
int score [10];//score有分數的意思,可以提高代碼的可讀性
2.2 一維數組的初始化
創建了數組之后,我們還需要對一維數組進行初始化,否則未經初始化得到的內存空間會留有“臟數據”(如下圖)
在數組的創建時,我們需要給他一些初始值,這個操作我們稱為數組的初始化
//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第?個元素初始化為1,剩余的元素默認初始化為0
//錯誤的初始化 - 初始化項太多
int arr3[3] = {1, 2, 3, 4};
2.3 一維數組的類型
數組也是有類型的,數組算是一種自定義類型,去掉數組名留下的就是數組的類型。
int arr1[10];//數組類型為int [10]
int arr2[12];//數組類型為int [12]
char ch[5];//數組類型為char [5]
那我們應該如何使用一維數組呢?
2.4 一維數組下標
C語言中規定數組是有下標的,下標是從0開始的,假設數組有n個元素,那么最后一個元素的下標是n - 1,下標就相當于數組元素的編號,如下:
int arr[10] = {1,2,3,4,5,6,7,8,9,10}
在C語言中數組的訪問提供了一個操作符[ ],這個操作符叫:下標引用操作符
有了下標和[ ]操作符這兩個工具,我們就能快速訪問數組中的一個元素,體現了數組的隨機訪問的特點。
如果我們想輸出arr數組中的元素7,就可以使用arr[6];如果我們訪問arr[0],得到的元素就是1。
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };printf("%d ", arr[6]);//7printf("%d ", arr[0]);//1return 0;
}
2.5 一維數組元素的輸入和輸出
那么我們應該如何對一個數組進行數據的輸入和打印呢,這里我們可以用到for循環、scanf函數、printf函數相結合的方法,具體實現方式如下:
int main()
{int arr[10] = {0};for (int i = 0; i < 10; i++){scanf("%d", &arr[i]);}for (int i = 0; i < 10; i++){printf("%d", arr[i]);}return 0;
}
2.6 一維數組在內存中的存儲
一維數組中的元素在內存中是如何存儲的呢?我們可以通過打印他們的地址來進行觀察
從輸出結果來看,數組隨著小標的增長,地址是由小到大變化的,并且我們發現每兩個相鄰的元素之間相差4,(因為一個整型是4個字節)。所以我們可以知道:數據在內存中是連續存放的。
也是因為數組的這個特性,我們可以通過指針的形式來訪問它的數據元素,具體講解見如下文章:C語言(09)——關于指針(逐漸清晰版)_內存指針-CSDN博客
2.7 sizeof操作符
在C和C++中,sizeof是一個操作符,不是函數
sizeof可以用來計算類型或者變量的大小,數組也是一種數據類型,故而使用sizeof我們可以得到數組的大小:
#include <stido.h>
int main()
{int arr[10] = {0};printf("%d\n", sizeof(arr[0]));//計算?個元素的??,單位是字節return 0;
}
加上接下來的代碼,我們也可以求得數組的元素個數:
printf("%d",sizeof(arr)/sizeof(arr[0]));
3. 二維數組
3.1 二維數組的概念
一維數組的元素都是內置類型的,當我們把一維數組作為數組的元素時,就產生了二維數組,二維數組作為數組元素的數組被稱為三維數組,二維數組以上的數組統稱為多維數組。
3.2?二維數組的創建
二維數組我們又該如何創建呢?
type arr_name[常量值1][常量值2];例如:
int arr[3][5];
double data[2][8];
在上述的例子int arr[3][5]中:
3表示數組有3行;
5表示每一行有5個元素;
int表示數組的每個元素都是整型類型;
arr是數組名,可以根據自己的需求制定名字。
3.3 二維數組的初始化
二維數組創建時,我們給他們設置一些初始值,這個過程我們稱為二維數組的初始化。
3.3.1 不完全初始化
int arr1[3][5] = {1,2};
int arr2[3][5] = {0};
3.3.2 完全初始化
int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
3.3.3 按照行初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}};
3.3.4 初始化的省略
int arr5[][5] = {1,2,3};
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};
3.4 二維數組下標
類比一維數組,下標在數組中的功能是強大的,那我們應該如何使用下標來確定特定的數組元素呢?二維數組是有行和列的(即下標),只要鎖定了行和列就能唯一鎖定數組中的一個元素。
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
C語言規定,二維數組的行是從0開始的,列也是從0開始的,如下所示:
3.5 二維數組的輸入和輸出
參考一維數組的輸入和輸出,二維數組的變更就是多了一個下標值的判斷,即嵌套一次循環,具體實現方式如下:
#include <stdio.h>
int main()
{int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};int i = 0;//遍歷?//輸?for(i=0; i<3; i++) //產??號{int j = 0;for(j=0; j<5; j++) //產?列號{scanf("%d", &arr[i][j]); //輸?數據}}//輸出for(i=0; i<3; i++) //產??號{int j = 0;for(j=0; j<5; j++) //產?列號{printf("%d ", arr[i][j]); //輸出數據}printf("\n");}return 0;
}
3.6 二維數組在內存中的存儲
同樣地,我們也可以通過對二維數組元素地址的打印來剖析他在內存中的存儲方式:
觀察輸出的結果,我們可以發現每一個內部的元素都是相鄰的,地址之間相差4個字節(int類型的空間大小),跨行位置處的兩個元素(如:arr[0][4]和arr[1][0])之間也是相差4個字節,所以在二維數組中的每個元素也是連續存放的,這是數據結構中的順序存儲結構典型表現形式。
附:一些小tips(晚些更新~)