前言大家好欢迎来到我的博客今天我主要讲解的是C语言数组的基本内容主要分为8个小节来进行讲解。接下来将开启数组篇章讲解的内容。1.数组概念与一维数组概念数组是一组相同类型的集合数组主要分为一维数组与多维数组2.一维数组2.1 一维数组创建和初始化1.创建的语法形式数据类型 数组名[常量值];[]中的常量值是用来指定数组的大小的根据实际指定即可intarr1[5];chararr2[5];chararr3[6];floatarr4[3];doublearr5[3];2.初始化一般使用大括号{}初始化的数组可以省略[]中的数组大小intarr1[]{1,2,3,4,5};chararr2[]{a,b,c,d,e};chararr3[]{abcde};floatarr4[]{1.1,1.2,1.3};doublearr5[]{1.1,1.2,1.3};其中一维数组可以进行部分初始化其余未初始化部分都为0如intarr1[5]{1,2,3};//第4、5个元素为0chararr2[5]{a,b,c};//第4、5个元素为\0\0对应的ASCll码值是02.2 一维数组的使用1.数组中的元素是通过数组下标来进行访问的数组的下标从0开始最后一个元素的下标为数组长度-1//元素 1 2 3 4 5//下标 0 1 2 3 4intarr[5]{1,2,3,4,5};printf(%d,arr[2]);//3printf(%d,arr[3]);//4在上面的数组当中访问一个元素需要用到下标引用操作符[]利用该操作符比如说想输出元素为3的数字可以使用arr[2]访问arr[3]即下标为3的元素得出的是42.数组中的所有元素可以通过循环的方式输入或输出访问数组中所有的元素可以称作为遍历例题有一个一维数组长度为10的数组对数组输入11~20的数字并打印数组所有元素#includestdio.hintmain(){intarr[]{1,2,3,4,5,6,7,8,9,10};inti0;for(i0;i10;i){scanf(%d,arr[i]);}for(i0;i10;i){printf(%d,arr[i]);}return0;}3.sizeof操作符1.sizeof操作符既可以计算类型或者变量大小也可以用来计算数组中的元素个数2.利用sizeof操作符得出数组所占内存空间的总字节大小再用sizeof操作符得出数组下标为0的一个元素的字节大小将两个结果进行除法运算就能得出数组的元素个数intarr[10]{0};printf(%d,sizeof(arr));//数组所有元素的总字节大小 4*1040printf(%d,sizeof(arr[0]));//一个元素的字节大小 4intszsizeof(arr)/sizeof(arr[0]);//数组元素个数 104.二维数组4.1 二维数组的创建和初始化1.创建数据类型 数组名 [常量值1][常量值2]其中二维数组中的常量值1用来表示数组的行数常量值2用来表示数组的列数2.初始化与一维数组一样也是使用大括号{}对数组进行初始化二维数组初始化可以省略行但不能省略列intarr1[2][3]{1,2,3,4,5,6};//可省略行数2//按照行初始化intarr2[2][3]{{1,2,3},{4,5,6}};3.二维数组也可以部分初始化其余未初始化部分都为0intarr1[2][3]{0,1};intarr2[2][3]{{0,1},{2,3}};//如果按行部分初始化必须写够{}如2行写2个{}3行写3个{},//按行初始化的各个{}中的元素不能为0个intarr3[3][4]{{1,2,3,4},{5,6},{7}};4.2 二维数组的使用1.二维数组也是通过下标来访问元素二维数组有行和列都是从下标0开始列 行012012314562789//3行3列的二维数组可以放入9个元素intarr[3][3]{1,2,3,4,5,6,7,8,9};printf(%d,arr[2][1]);//6printf(%d,arr[0][1]);//2根据二维数组的行数和列数通过下标操作符[]的使用比如说要访问第2行第1列的元素写成arr[2][1]我们可以得到数字6访问arr[0][1]得出的元素是数字22.二维数组也可以运用循环对数组中的元素进行输入和输出的操作例题有一个二维数组长度为12的数组对数组输入13~24的数字并打印数组所有元素#includestdio.hintmain(){intarr[3][4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};intszsizeof(arr)/sizeof(arr[3][4]);inti0;for(i0;i3;i){intj0;//每一次换行都从下标为0的第0列开始输入数值for(j0;j4;j){scanf(%d,arr[i][j]);}}for(i0;i3;i){intj0;//每一次换行都从下标为0的第0列开始输出数值for(j0;j4;j){printf(%d ,arr[i][j]);}printf(\n);}return0;}5.数组类型该如何描述1.在这之前我们已经学完数组创建、初始化和使用的基本内容在之前的sizeof操作符中提到sizeof操作符可以计算类型的大小intarr1[5]{1,2,3,4,5};intarr2[2][2]{1,2,3,4};printf(%zu,sizeof(arr[0]));//4printf(%zu,sizeof(arr[0][0]));//4从上面的结果得出的字节数都是4可它们运算的不是int类型而是int [5]和int [2][2]因此数组中的类型不像直接创建个变量一样用sizeof运算arr1数组的类型不是int类型而是int [5]2.在观察数组类型的时候应需要注意的是将数组名(如arr1)去掉剩下的是数组类型即int [5];在后续学习指针内容当中也会出现类似情况6.一维数组与二维数组的存储1.接下来先看一张一维数组在内存中的地址与输出每个元素地址对比的图片从上图可以看到在程序中输出每个元素的地址和在内存中观察到的地址都是一样的从这个一维数组中不难看出数组在内存中都是连续存放的并且从它们的地址可以看出每个元素是相差4个字节存放在内存当中2.接下来再来看看二维数组的图片从上图可以看到二维数组输出各个元素的地址与内存中存放的地址也是一样的二维数组的元素在内存中也是连续存放的二维数组虽然有行和列但实际上是按照一维数组的方式连续存放在内存当中的从二维数组中的地址可以看出每个元素相差4个字节存放在内存当中7.数组越界在我们使用数组时要防止数组下标超出边界确定好数组长度示例图1在代码1中数组正常打印下标为0~4的元素从代码2的输出的值来看除了正常打印下标0~4的值和地址以外最后还打印了两个随机数再从这两个数输出的地址可以得出程序访问的是下标4后面本不应该有的下标5和6的地址这时发生的是数组越界的问题访问数组越界下标的值是一种未定义行为程序会打印一个随机值或者程序出现异常中止的情况8.变长数组在C99标准中变长数组可以使用变量指定数组大小intnab;intarr[n];在上面的代码中数组arr是变长数组数组长度取决于n变长数组只有在运行时才能确定因此变长数组不能初始化变长数组的长度在程序运行后一旦被确定就不能更改结语关于数组的知识就先讲解到这数组还会在后续要讲解的函数和指针中出现数组、函数和指针三者之间关系密切需要讲解的相关知识还有很多因此C语言数组的学习还未停止。最后如果您看完此文章能帮助您更好的了解和学习数组建议您点赞收藏同时文章若有出现令人误解的错误请不忘在评论区指出并纠正。至于后事如何请期待下回讲解
C语言篇章--数组
前言大家好欢迎来到我的博客今天我主要讲解的是C语言数组的基本内容主要分为8个小节来进行讲解。接下来将开启数组篇章讲解的内容。1.数组概念与一维数组概念数组是一组相同类型的集合数组主要分为一维数组与多维数组2.一维数组2.1 一维数组创建和初始化1.创建的语法形式数据类型 数组名[常量值];[]中的常量值是用来指定数组的大小的根据实际指定即可intarr1[5];chararr2[5];chararr3[6];floatarr4[3];doublearr5[3];2.初始化一般使用大括号{}初始化的数组可以省略[]中的数组大小intarr1[]{1,2,3,4,5};chararr2[]{a,b,c,d,e};chararr3[]{abcde};floatarr4[]{1.1,1.2,1.3};doublearr5[]{1.1,1.2,1.3};其中一维数组可以进行部分初始化其余未初始化部分都为0如intarr1[5]{1,2,3};//第4、5个元素为0chararr2[5]{a,b,c};//第4、5个元素为\0\0对应的ASCll码值是02.2 一维数组的使用1.数组中的元素是通过数组下标来进行访问的数组的下标从0开始最后一个元素的下标为数组长度-1//元素 1 2 3 4 5//下标 0 1 2 3 4intarr[5]{1,2,3,4,5};printf(%d,arr[2]);//3printf(%d,arr[3]);//4在上面的数组当中访问一个元素需要用到下标引用操作符[]利用该操作符比如说想输出元素为3的数字可以使用arr[2]访问arr[3]即下标为3的元素得出的是42.数组中的所有元素可以通过循环的方式输入或输出访问数组中所有的元素可以称作为遍历例题有一个一维数组长度为10的数组对数组输入11~20的数字并打印数组所有元素#includestdio.hintmain(){intarr[]{1,2,3,4,5,6,7,8,9,10};inti0;for(i0;i10;i){scanf(%d,arr[i]);}for(i0;i10;i){printf(%d,arr[i]);}return0;}3.sizeof操作符1.sizeof操作符既可以计算类型或者变量大小也可以用来计算数组中的元素个数2.利用sizeof操作符得出数组所占内存空间的总字节大小再用sizeof操作符得出数组下标为0的一个元素的字节大小将两个结果进行除法运算就能得出数组的元素个数intarr[10]{0};printf(%d,sizeof(arr));//数组所有元素的总字节大小 4*1040printf(%d,sizeof(arr[0]));//一个元素的字节大小 4intszsizeof(arr)/sizeof(arr[0]);//数组元素个数 104.二维数组4.1 二维数组的创建和初始化1.创建数据类型 数组名 [常量值1][常量值2]其中二维数组中的常量值1用来表示数组的行数常量值2用来表示数组的列数2.初始化与一维数组一样也是使用大括号{}对数组进行初始化二维数组初始化可以省略行但不能省略列intarr1[2][3]{1,2,3,4,5,6};//可省略行数2//按照行初始化intarr2[2][3]{{1,2,3},{4,5,6}};3.二维数组也可以部分初始化其余未初始化部分都为0intarr1[2][3]{0,1};intarr2[2][3]{{0,1},{2,3}};//如果按行部分初始化必须写够{}如2行写2个{}3行写3个{},//按行初始化的各个{}中的元素不能为0个intarr3[3][4]{{1,2,3,4},{5,6},{7}};4.2 二维数组的使用1.二维数组也是通过下标来访问元素二维数组有行和列都是从下标0开始列 行012012314562789//3行3列的二维数组可以放入9个元素intarr[3][3]{1,2,3,4,5,6,7,8,9};printf(%d,arr[2][1]);//6printf(%d,arr[0][1]);//2根据二维数组的行数和列数通过下标操作符[]的使用比如说要访问第2行第1列的元素写成arr[2][1]我们可以得到数字6访问arr[0][1]得出的元素是数字22.二维数组也可以运用循环对数组中的元素进行输入和输出的操作例题有一个二维数组长度为12的数组对数组输入13~24的数字并打印数组所有元素#includestdio.hintmain(){intarr[3][4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};intszsizeof(arr)/sizeof(arr[3][4]);inti0;for(i0;i3;i){intj0;//每一次换行都从下标为0的第0列开始输入数值for(j0;j4;j){scanf(%d,arr[i][j]);}}for(i0;i3;i){intj0;//每一次换行都从下标为0的第0列开始输出数值for(j0;j4;j){printf(%d ,arr[i][j]);}printf(\n);}return0;}5.数组类型该如何描述1.在这之前我们已经学完数组创建、初始化和使用的基本内容在之前的sizeof操作符中提到sizeof操作符可以计算类型的大小intarr1[5]{1,2,3,4,5};intarr2[2][2]{1,2,3,4};printf(%zu,sizeof(arr[0]));//4printf(%zu,sizeof(arr[0][0]));//4从上面的结果得出的字节数都是4可它们运算的不是int类型而是int [5]和int [2][2]因此数组中的类型不像直接创建个变量一样用sizeof运算arr1数组的类型不是int类型而是int [5]2.在观察数组类型的时候应需要注意的是将数组名(如arr1)去掉剩下的是数组类型即int [5];在后续学习指针内容当中也会出现类似情况6.一维数组与二维数组的存储1.接下来先看一张一维数组在内存中的地址与输出每个元素地址对比的图片从上图可以看到在程序中输出每个元素的地址和在内存中观察到的地址都是一样的从这个一维数组中不难看出数组在内存中都是连续存放的并且从它们的地址可以看出每个元素是相差4个字节存放在内存当中2.接下来再来看看二维数组的图片从上图可以看到二维数组输出各个元素的地址与内存中存放的地址也是一样的二维数组的元素在内存中也是连续存放的二维数组虽然有行和列但实际上是按照一维数组的方式连续存放在内存当中的从二维数组中的地址可以看出每个元素相差4个字节存放在内存当中7.数组越界在我们使用数组时要防止数组下标超出边界确定好数组长度示例图1在代码1中数组正常打印下标为0~4的元素从代码2的输出的值来看除了正常打印下标0~4的值和地址以外最后还打印了两个随机数再从这两个数输出的地址可以得出程序访问的是下标4后面本不应该有的下标5和6的地址这时发生的是数组越界的问题访问数组越界下标的值是一种未定义行为程序会打印一个随机值或者程序出现异常中止的情况8.变长数组在C99标准中变长数组可以使用变量指定数组大小intnab;intarr[n];在上面的代码中数组arr是变长数组数组长度取决于n变长数组只有在运行时才能确定因此变长数组不能初始化变长数组的长度在程序运行后一旦被确定就不能更改结语关于数组的知识就先讲解到这数组还会在后续要讲解的函数和指针中出现数组、函数和指针三者之间关系密切需要讲解的相关知识还有很多因此C语言数组的学习还未停止。最后如果您看完此文章能帮助您更好的了解和学习数组建议您点赞收藏同时文章若有出现令人误解的错误请不忘在评论区指出并纠正。至于后事如何请期待下回讲解