数组初识
数组是一个大小固定、能够存储相同类型元素的顺序集合,属于C语言基本语法之一
一维数组
数组声明 在C语言中,声明一个数组需要指定元素类型和数组长度
type array_name[array_size]; --- 合法的数据类型,数组名,数组长度
举例 使用int 类型
int arr[10]; ---数据类型为:int类型, 数组名:arr, 数组长度:10
数组初始化
你可以逐个元素进行初始化,也可以统一进行初始化
1.逐个元素初始化 初始化的元素个数不能超出array_size,一般编译器会进行报错
int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
2.统一进行初始化 这种方法相较上面具有更加灵活性,假设有几十个数据需要存储,总不能对它们进行一一初始化(个人认为)
int arr[10] = { 0 };
3.补充说明:可以对数组进行部分元素赋值初始化
注意:如果未说明数组的长度,那么数组的长度就为你初始化元素个数的数值,
未说明数组的长度,必须对数组进行初始化,因为C语言不允许使用不完整的类型,
且之后进行数组使用的时候必须注意数组越界的情况,数组长度即为初始化的长度,是一个固定值
**使用数组必须注意数组越界情况
数组使用(访问数组元素)
通过数组名+[ 数组元素的下标]进行访问数组元素,至于为什么,了解了指针就明白了
#include<stdio.h> int main(){ // 声明数组 // 没有进行初始化时,[]内的数组长度必须说明,否则产生error // 因为C不允许使用不完整结构的类型 int arr_0[10]; // 声明数组同时进行逐个元素初始化 int arr_1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 声明数组同时进行半初始化 int arr_2[10] = { 0 }; // 使用数组 -> 使用arr_0进行说明 for(int i = 0; i < sizeof(arr_0) / sizeof(int); i++){ arr_0[i] = i; } // 打印数组元素 for(int i = 0; i < sizeof(arr_0) / sizeof(int); i++){ printf("arr_0[%d] = %d ", i, arr_0[i]); } return 0; }
二维数组
二维数组实质就是一维数组的列表,也就是说二维数组是建立在一维数组基础之上的一维数组,具体构造图下面会有解释(个人理解二维数组的构造图)
数组声明
type array_name[row][col]; ---合法的数据类型,数组名,row是行数,col是列数
数组初始化
1.分行给二维数组赋初值
int arr[3][4] = { {1, 2 ,3 ,4 }, {5, 6, 7, 8 } ,{9 ,10 ,11 ,12 } }; ---可以看出,二维数组初始化与一维数组初始化形似且神似
2.所有元素直接写在一个花括号内
int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; ---编译器会将元素按照分行方式对数组元素进行排列
3.对部分元素进行赋初值
1>int arr[3][4] = { {1}, {5}, {9} };
2>int arr[3][4] = { {1, 2, 3 ,4 } };
注意:二维数组初始化时,与一维数组也有不同的地方
eg:可以直接声明int arr[3][4],不可以int arr[3][ ]--int arr[ ][4],更不可以int arr[ ][ ] 数组结构不完整
数组使用(访问数组元素)
二维数组有行号和列号,所以我们引用的时候需要注意row-col下标的使用,使用错误可能会导致数组越界等等error、warning问题
二维数组访问元素的方式 arr[ row_index ][ col_index ] = e;
二维数组结构图(个人想法,不知道合理性怎么样)
#include<stdio.h> int main(){ // 二维数组的实质是也是一维数组 arr[row][col] // row->行 col->列 int arr[3][4] = { 0 }; //二维数组的不完全初始化 int col_t = sizeof(arr[0]) / sizeof(int); int row_t = sizeof(arr) / sizeof(int) / col_t; printf("row_t = %d col_t = %d ", row_t, col_t); for (int row = 0; row < row_t; row++) { for (int col = 0; col < col_t; col++) { // 对二维数组进行复制操作 arr[row][col] = (row + 1) * (col + 1); } } // 打印q二位数组 printf("打印全部二维数组的元素: "); for (int row = 0; row < row_t; row++) { for (int col = 0; col < col_t; col++) { printf("arr[%d][%d] = %d ", row, col, arr[row][col]); } printf(" "); } // 打印每一行的元素 printf("打印第二行的全部元素:"); for (int col = 0; col < col_t; col++) { printf("arr[1][%d] = %d ",col,arr[1][col]); } printf(" "); return 0; }