數組
- 一.數組的概念
- 二. 一維數組的創建和初始化
- 2.1數組的創建
- 2.2數組的初始化
- 錯誤的初始化
- 2.3 數組的類型
- 三. 一維數組的使用
- 3.1數組的下標
- 3.2數組元素的打印
- 3.2數組元素的輸入
- 四. 一維數組在內存中的存儲
- 五. 二維數組的創建
- 5.1二維數組的概念
- 5.2如何創建二維數組
- 六·.二維數組的初始化
- 6.1不完全初始化
- 6.2完全初始化
- 6.3按行初始化
- 6.4 初始化時省略行,但是不能省略列
- 七.二維數組的使用
- 7.1 二維數組的輸入和輸出
- 八. 二維數組在內存中的存儲
- 最后還有一個題目就是**多個字符從兩端移動,向中間匯聚**
一.數組的概念
數組是?組相同類型元素的集合
1.數組中存放的是1個或者多個數據,但是數組元素個數不能為0。
2.數組中存放的多個數據,類型是相同的。
二. 一維數組的創建和初始化
2.1數組的創建
type arr_x[n]//n是數組元素個數
存放在數組的值被稱為數組的元素,數組在創建的時候可以指定數組的大小和數組的元素類型。
上述代碼中的type指的是數組中存放的數據類型,數據類型可以是char
, short
,int
等等…
arr_x
指的是數組名的名字
[]
是下標引用操作符
比如:有20個整型元素,存放在數組中,此時可以創建一個一維數組:
int arr[20]
當然其他類型也可以,比如:
char ch[20];
float core[10];
2.2數組的初始化
如何對數組進行初始化呢,下面就來解釋
int arr[5]={1,2,3,4,5};
上述代碼就是數組的完全初始化
int arr1[5]={0};
上述代碼就是數組的不完全初始化,也就是第一個元素為1,其余未初始化的數據,默認就是0
錯誤的初始化
int a[2]={0,1,23,4,5};
上述代碼會報錯,因為設置的初始值太多
2.3 數組的類型
數組也是具有類型的,數組也算是一種自定義類型,把數組名去掉剩下的就是數組類型
比如
char arr1[20];
int arr2[30];
arr1數組的類型就是char [20]
arr2數組的類型就是 int [30]
三. 一維數組的使用
3.1數組的下標
C語?規定數組是有下標的,下標是從0開始的,假設數組有n個元素,最后?個元素的下標是n-1,下標就相當于數組元素的編號,如下:
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
在C語?中數組的訪問提供了?個操作符[]
,這個操作符叫:下標引用操作符
int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9,10}; printf("%d\n", arr[7]);//8printf("%d\n", arr[3]);//4return 0;
}
3.2數組元素的打印
這里我們直接訪問數組下標就可以實現數組打印
#include <stdio.h>
int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int i = 0;for(i=0; i<10; i++){printf("%d ", arr[i]);}return 0;
}
下面是運行結果
3.2數組元素的輸入
這里我們用for‘循環來實現數組的輸入
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;for (i = 0; i < 10; i++){scanf("%d", &arr[i]);}for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}
下面是運行結果
四. 一維數組在內存中的存儲
下面一段代碼,將打印數組的地址
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;for (i = 0; i < 10; i++){printf("&arr[%d] = %p\n ", i, &arr[i]);}return 0;
}
下面是運算結果:
從輸出的結果來看,數組隨著下標的增?,地址是由小到大變化的,并且我們發現每兩個相鄰的元素之間相差4(因為?個整型是4個字節)。所以:數組在內存中是連續存放的。
五. 二維數組的創建
5.1二維數組的概念
如果我們把?維數組做為數組的元素,這時候就是?維數組,?維數組作為數組元素的數組被稱為三維數組,?維數組以上的數組統稱為多維數組。
5.2如何創建二維數組
type arr_zy[n][n]//n是常量//如:
int arr_zy[3][7]
double arr_zy1[5][6]
解釋上述代碼中的信息:
3代表三行
7代表每行有7個元素
int表示數組的每個元素都是整型
arr_zy數組名,可以自定義
六·.二維數組的初始化
在創建變量或者數組的時候,給定?些初始值,被稱為初始化。
6.1不完全初始化
int arr_zy[2][4]={1,2,3};
double arr_zy1[3][6]={6,5,2};
6.2完全初始化
int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
6.3按行初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}};
6.4 初始化時省略行,但是不能省略列
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};
七.二維數組的使用
7.1 二維數組的輸入和輸出
我們只要能夠按照?定的規律產?所有的?和列的數字就行;以上?段代碼中的arr數組為例,行的選擇范圍是0~ 2,列的取值范圍是0~4,所以我們可以借助循環實現?成所有的下標
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;
}
下面是運行結果:
八. 二維數組在內存中的存儲
可以打印出數組所有元素的地址的。代碼如下:
int main()
{int arr[3][5] = { 0 };int i = 0;int j = 0;for (i = 0; i < 3; i++){for (j = 0; j < 5; j++){printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);}}return 0;
}
運行結果如下:
最后還有一個題目就是多個字符從兩端移動,向中間匯聚
#include<string.h>
#include<time.h>
#include<stdio.h>
#include<Windows.h>
int main()
{char arr1[] = "welcome to zy space";char arr2[] = "#######################";int left = 0;int right = strlen(arr1) - 1;printf("%s\n", arr2);while (left <= right){Sleep(1000);arr2[left] = arr1[left];arr2[right] = arr1[right];left++;right--;printf("%s\n", arr2);}return 0;
}
運行結果: