文章目錄
- 6. 二維數組的創建
- 6.1 ?維數組的概念
- 6.2 ?維數組的創建
- 7. 二維數組的初始化
- 7.1 不完全初始化
- 7.2 完全初始化
- 7.3 按照?初始化
- 7.4 初始化時省略?,但是不能省略列
- 8. 二維數組的使用
- 8.1 ?維數組的下標
- 8.2 ?維數組的輸?和輸出
- 9. 二維數組在內存中的存儲
- 10. C99中的變長數組
- 11. 數組練習
6. 二維數組的創建
6.1 ?維數組的概念
如果我們把一維數組做為數組的元素,這時候就是二維數組。二維數組以上的數組統稱為多維數組。
也就是說可以理解成二維數組就是由多行一維數組組成的。
6.2 ?維數組的創建
二維數組語法:
type arr_name[常量值1][常量值2];
舉個例子:
int arr[3][5];
3表示數組有3行
5表示每一行有5個元素,也可以理解成5列
int 表示數組的每個元素是整型類型
arr 是數組名,可以根據自己的需要指定名字
7. 二維數組的初始化
7.1 不完全初始化
int arr1[3][5] = {1,2};
int arr2[3][5] = {0};
![]() | ![]() |
---|
7.2 完全初始化
int arr3[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
7.3 按照?初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}};
7.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}};
8. 二維數組的使用
8.1 ?維數組的下標
二維數組是有行和列的,只要鎖定了行和列就能唯一鎖定數組中的元素.
第一行藍色的數字表示列號,第一列藍色數字表示行號。
都是從0開始的。
arr[0][0]
=1
arr[1][2]
=8
8.2 ?維數組的輸?和輸出
如何訪問整個二維數組?
#include <stdio.h>
int main()
{int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };int i = 0;for (i = 0; i < 3; i++) //產生行號{int j = 0;for (j = 0; j < 5; j++) //產生列號{printf("%d ", arr[i][j]);}printf("\n");}return 0;
}
打印:
如果想改變整個數組的元素,并且打印的話就這樣:
#include <stdio.h>
int main()
{int arr[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};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;
}
打印:
9. 二維數組在內存中的存儲
我們先打印出數組所有元素的地址:
#include <stdio.h>
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;
}
打印:
從輸出的結果來看,每一行內部的每個元素都是相鄰的,地址之間相差4個字節。
一些特殊的地方,比如說:arr[0][4]
和arr[1][0]
之間也是差4個字節。
所以二維數組中的每個元素都是連續存放的。
10. C99中的變長數組
在C99標準之前,C語言在創建數組的時候,數組大小的指定只能使用常量、常量表達式,或者如果我們初始化數據的話,可以省略數組大小。
int arr1[10];
int arr2[3+5];
int arr3[] = {1,2,3};
這樣的語法限制,讓我們創建數組就不夠靈活,有時候數組大了浪費空間,有時候數組又小了不夠用。
于是,C99標準中給一個變長數組的新特性,允許我們可以使用變量指定數組大小。
int n = a+b;
int arr[n];
這個例子里面,數組 arr 就是變長數組,因為它的長度取決于變量 n 的值,編譯器沒法事先確定,只有運行時才能知道 n 是多少。
變長數組的數組長度只有運行時才能確定,所以變長數組不能初始化。
注意:有些編譯器不支持C99語法,所以使用變長數組有時會報錯。
11. 數組練習
編寫代碼,演示多個字符從兩端移動,向中間匯聚:
#include <stdio.h>
int main()
{char arr1[] = "welcome to bit...";char arr2[] = "#################";int left = 0;int right = strlen(arr1)-1;//得到數組元素個數減一,用作數組最右邊一個元素printf("%s\n", arr2);while(left<=right){Sleep(1000);//延時1秒,這個函數只有Windows電腦可以用//這個延時函數可以讓下面的打印慢慢出來,比較好玩arr2[left] = arr1[left];arr2[right] = arr1[right];//將arr1中的字符賦值給arr2中的對應位置。這樣arr2中的井號被arr1中的字符替換。left++;right--;//left++;和right--;分別將left和right向中間移動,left 向右移動,right向左移動。printf("%s\n", arr2);}return 0;
}
打印: