多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

数组相关内容

数组相关内容 一、一维数组1.数组的定义 数组是相同类型元素的一个集合。在内存中是一段连续的空间。2. 一维数组创建和初始化一维数组创建的基本语法如下 type arr_name[常量值];根据该语法我们可以创建出这样的数组 示例 int arr[5]; 表示创建了一个长度为5的整型数组int main() { int arr1[5] {1,2,3,4,5}; int arr2[5] {1,2}; //省略数组的长度程序会根据数组元素个数推导出输出长度 int arr3[] {1,2}; return 0; }3. 一维数组使用3.1 数组下标数组下标规则 C语言规定数组是有下标的下标是从0开始的假设数组有n个元素最后一个元素的下标是n-1下标就相当于 数组元素的编号。int arr[10] {1,2,3,4,5,6,7,8,9,10};其中2的下标就是arr[1]3.2 通过数组下标访问元素访问元素的方式为 数组名[下标]3.2.1 访问单独数据#includestdio.h int main() { int arr[10] {1,2,3,4,5,6,7,8,9,10}; printf(%d\n,arr[2]);//输出3 printf(%d\n,arr[7]);//输出8 return 0; }3.2.2 访问数组当中的所有数据#includestdio.h int main() { int arr[10] {1,2,3,4,5,6,7,8,9,10}; for (int i 0; i 10; i) { printf(%d , arr[i]); } printf(\n); return 0; }3.2.3 给数组输入元素#includestdio.h int main() { int arr[5]; int i 0; for (i 0; i 5; i) { scanf(%d, arr[i]); } for (i 0; i 5; i) { printf(%d , arr[i]); } return 0; }4. 一维数组在内存当中的存储数组的内存特性我们知道数组的定义是相同类型元素的一个集合。在内存中是一段连续的空间。 意味着每个元素与每个元素之间内存是连续的。定义的变量会放在内存上标记内存的时候是根据地址标记的标记的方式就是以字节为单位刻度进行标记#includestdio.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(arr[%d] %d\n, i, arr[i]);// 使用%p也是可以的 } return 0; }由于是整型数组每个元素是4个字节所以地址间隔也是4。地址当前变量在内存中的位置。 以字节为单位5.sizeof与数组sizeof计算数组大小我们可以通过sizeof(数组名)来计算整个数组的字节大小。#includestdio.h int main() { int arr[10] { 1,2,3,4,5,6,7,8,9,10 }; printf(%d\n, sizeof(arr)); return 0; }此时输出结果是40表示整个数组此时所占内存空间的大小为40字节。 我们已知整个数组的字节大小为40字节每个元素的大小为4个字节。此时就可以计算出数组的长度#includestdio.h int main() { int arr[10] { 1,2,3,4,5,6,7,8,9,10 }; printf(%d\n, sizeof(arr)/sizeof(arr[0])); return 0; }6.二分查找给定一个升序的整型数组在这个数组中查找到指定的值n查找前先排序arr[mid]的值和要找的n值进行比较arr[mid] n 在右边 i mid 1arr[mid] n 在左边 j mid -1二、二维数组1. ⼆维数组的概念⼆维数组是相同数据类型元素按⾏和列排列的矩形集合可以把⼆维数组写成⾏和列的排列形式来理 解⼆维数组的逻辑结构。站在⼀维数组的基础上理解⼆维数组可以理解为⼆维数组是把⼀维数组作为数组的元素2.初始化完全初始化#includestdio.h int main() { int arr[2][3] { 1,2,3,4,5,6 }; return 0; }指 定⾏和列进⾏初始化#includestdio.h int main() { int arr1[2][3] { {1,2,3},{4,5,6} }; int arr2[2][3] { {1,2},{4} }; return 0; }不完全初始化#includestdio.h int main() { int arr1[2][3] { 1,2,3,4 }; int arr2[2][3] { 0 }; return 0; }注意 •⼆维数组定义的时候可以省略⾏不能省略列。程序会根据列⾃动推导出⾏#includestdio.h int main() { int arr[][3] { 1,2,3,4,5,6 }; return 0; }3. ⼆维数组的使⽤3.1 ⼆维数组下标⼆维数组的访问也是通过 [] 的⽅式进⾏访问⾏位0列为2.在C语⾔中确定⽅式为 数组名 [ ⾏ ][ 列 ] 的⽅式arr[0][2]: 对应数据为 3 arr[1][0]: 对应数据为 4 arr[1][2]: 对应数据为 63.2 通过数组下标访问元素3.2.1 访问单独数据#includestdio.h int main() { int arr[2][3] { 1,2,3,4,5,6 }; printf(%d\n,arr[0][2]); printf(%d\n,arr[1][0]); printf(%d\n,arr[1][2]); return 0; }3.2.2 访问数组当中的所有数据#includestdio.h int main() { int arr[2][3] { 1,2,3,4,5,6 }; int row 2; int col 3; for (int i 0; i row; i) { for (int j 0; j col; j) { printf(%d , arr[i][j]); } printf(\n); } return 0; }4.⼆维数组在内存当中的存储数组本⾝就是⼀块连续的存储空间所以⽆论是⼀维数组还是⼆维数组我们通过打印地址可以发现 内存确实是连续的空间。#includestdio.h int main() { int arr[2][3] {0}; int row 2; int col 3; for (int i 0; i row; i) { for (int j 0; j col; j) { printf(arr[%d][%d] %d\n, i, j, arr[i][j]); } } return 0; }
返回列表