目錄
- 前言
- 陣列的定義
- 陣列相關的知識點
- 一維陣列的創建
- 一維陣列的初始化
- 一位陣列的使用
- 一位陣列在記憶體中的存盤
- 二維陣列的創建
- 二維陣列的初始化
- 二維陣列的使用
- 二維陣列在記憶體中的存盤
- 結語
前言
我相信在任何編程語言中,陣列都是一個極為重要的資料型別,
而在C語言,陣列屬于構造型別,
陣列的運用十分廣泛,因此我們有必要對這一塊知識重視,
今天就讓我們從零開始學習陣列的相關知識吧!
陣列的定義
陣列就是一組相同資料型別的元素的集合,
陣列的元素在記憶體中是連續存放的,
陣列相關的知識點
一維陣列的創建
一維陣列的創建格式如下:
資料型別 + 陣列名 + [ 陣列元素的個數 ]
代碼演示如下:
int arr1[10];
char arr2[10];
float arr3[1];
double arr4[20];
需要注意的是,C99標準之前,C語言的陣列在指定大小的時候,是不支持用變數來指定大小的,即使是const修飾的常變數也不行,
代碼演示如下:
int count1 = 10;
int arr1[count1];//這是不允許的
const int count2 = 10;
int arr2[count2];
一維陣列的初始化
陣列的初始化是指,在創建陣列的同時給陣列的內容一些合理初始值(初始化),
代碼演示如下:
int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {1,2,3,4,5};
char arr4[3] = {'a',98, 'c'};
char arr5[] = {'a','b','c'};
char arr6[] = "abcdef";
注意
陣列在創建的時候如果想不指定陣列的確定的大小就得初始化,
此時陣列會根據初始化的內容來確定陣列元素的個數,
但是
字符陣列的初始化方式的不同,會導致不同的結果,
char arr1[] = "abc";
char arr2[3] = {'a','b','c'};
上述代碼中,arr1的初始化方式會默認在最后加上‘\0’來作為字串結束的標志,
此時arr1這個陣列的元素個數位4,
而arr2的初始化方式不會在最后加上‘\0’,那么這時候,如果要用strlen函式來求字串的長度的時候,得到的結果就會是隨機值,
一位陣列的使用
陣列的訪問,我們需要用到一個運算子:[ ] ,下標解參考運算子,
當我們要訪問陣列的元素的時候,需要用到這個運算子號,
注意
當我們訪問陣列的第一個元素的時候,下標應為0,即arr[ 0 ],
代碼演示如下:
#include <stdio.h>
int main()
{
int arr[10] = { 0 };//整型陣列的不完全初始化
//計算陣列的元素個數
int sz = sizeof(arr) / sizeof(arr[0]);
//對陣列內容賦值,陣列是使用下標來訪問的,下標從0開始,所以:
int i = 0;//做下標
for (i = 0; i < 10; i++)//這里小于10不用加等于號,否則就會造成陣列越界
{
arr[i] = i;
}
//輸出陣列的內容
for (i = 0; i < 10; ++i)
{
printf("%d ", arr[i]);
}
return 0;
}
小結
陣列是使用下標來訪問的,下標是從0開始,
陣列的大小可以通過計算得到,
一位陣列在記憶體中的存盤
陣列在記憶體中的存盤是連續的,
代碼演示如下:
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i)
{
printf("&arr[%d] = %p\n", i, &arr[i]);
}
return 0;
}
當我們執行上面的代碼的時候,會得到如下的結果

我們可以看到,每一個元素的地址是連續的,而且隨著下標的增大,地址也在增大,
每相鄰的兩個元素的地址,相差的數值等于元素對應的資料型別的大小,
如:上述代碼中的陣列的元素是整型的,而整型資料的大小是4個位元組,所以相鄰元素的地址就相差4,
記憶體圖如下:

二維陣列的創建
二位陣列的創建與一維陣列的創建相似,
代碼演示如下:
int arr[3][4];
char arr[3][5];
double arr[2][4];
其中第一個[ ]表示該陣列有多少層 ,第二個[ ]每一層有多少個元素,
二維陣列的每一層都可以看成是一個一維陣列,
因此,二維陣列其實也可以看成是一維陣列,而這個陣列的每一個元素也是一個一維陣列,
(有種套娃的感覺了~)
二維陣列的初始化
二維陣列的初始化也有幾種不同的方式
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}};
int arr[][4] = {{2,3},{4,5}};
與一維陣列相同,行數可以省略,此時二維陣列會根據初始化來確定大小,但是,列不能夠省略,
而二維陣列初始化的時候,還可以加上{ },方便理解,
二維陣列的使用
二維陣列的使用與一維陣列一樣,也是通過下標訪問的方式,
代碼演示如下:
#include <stdio.h>
int main()
{
int arr[3][4] = { 0 };//不完全初始化
int i = 0;
for (i = 0; i < 3; i++)//遍歷每一行
{
int j = 0;
for (j = 0; j < 4; j++)//遍歷一行當中的每一個元素
{
arr[i][j] = i * 4 + j;
}
}
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 4; j++)
{
printf("%d ", arr[i][j]);
}
}
return 0;
}
二維陣列在記憶體中的存盤
同樣是和一維陣列的存盤方式一樣,在記憶體中是連續的,
代碼演示如下:
#include <stdio.h>
int main()
{
int arr[3][4];
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 4; j++)
{
printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
}
}
return 0;
}
上述的代碼運行結果如下:

由此我們知道,二維陣列也是連續存放的,第二層的第一個元素是接著第一層的最后一個元素的,
結語
今天我們就先了解一維陣列和二維陣列相關的基本知識,關于陣列越界和陣列傳參的內容,我們放在下期哦~
還是那句老話,創作不易呀,希望小伙伴們可以動動小手,給我一個關注、一個贊還有評論哦~
由于本人能力有限,如果有錯誤的地方,希望大佬們可以指出!

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/305832.html
標籤:其他
上一篇:高中資訊技術:資訊技術教學論
下一篇:Nginx編譯安裝
