首页 > 其他分享 >C语言基础:数组(二维数组)

C语言基础:数组(二维数组)

时间:2024-12-12 12:56:20浏览次数:15  
标签:11 arr int C语言 二维 数组 sizeof

数组

二维数组

定义:

二维数组本质上是一个行列式的组合,也就是说二维数组是由行和列两部分组成。二维数组数据是通过行列解读。

二维数组可被视为一个特殊的一维数组,相当于二维数组又是一个一维数组,只不过它的元素是一维数组。(也就是说数组的元素可以是数组类型)。

语法
 类型 数组名[行数][列数]; 

举例:

 int arr1[3][3] = {{11,12,13},{21,22,23},{31,32,33}};//等价于下面写法
 int arr2[][3] =  {{11,12,13},{21,22,23},{31,32,33}}; //柔性数组
 ​
 int arr3[3][3] = {{11,12},{21,22,23},{31}};//等价于下面写法(柔性数组,根据列中最大列的元素个数分配)
 int arr2[3][3] = {{11,12,0},{21,22,23},{31,0,0}};
 ​
 int arr[][] = {{11,12,13},{21,22,23},{31,32,33}};//这种写法,会编译报错

注意:在C语言中,二维数组在计算机的存储顺序是按行进行的,即第一维的下标变化慢,第二维的下标变化快。

应用场合

主要应用于数据有行列要求的情况,比如说我们现在要存储粤嵌目前在读班级的学生的成绩。

特殊写法
  • 下标可以是整型表达式,如:a[2-1][2*2-1]

  • 小标可以是已经有值的变量或数组元素,如a[2*x-1][b[3][1]]

  • 数组元素可以出现在表达式中,如:b[1][2] = a[2][3]/2

注意:使用是数组元素的下标应在已定义数组的大小范围;应注意区别定义数组大小和引用数组元素的区别

初始化
  • 分行给二维数组赋初值

 int arr[3][4] = {{11,12,13,14},{21,22,23,24},{31,32,33,34}};
  • 可将所有数据写在一个花括号内,按照排列顺序对元素赋值

 int arr[3][4] = {11,12,13,14,21,22,23,24,31,32,33,34};
  • 可对部分元素赋初值,其余未赋值部分自动填充 (整型)默认值-0 | 字符型默认值-\0 | 浮点型默认值0.0..

 int arr[3][4] = {{11},{21,22},{31}};
  • 若对全部元素赋初值,自定义数组时可以省略第1维数组的长度,第2维数组的长度必须指明。

 int a[][4] = {11,12,13,14,15,16,17,18};
  • 在分行赋初值时,也可以省略第1维的长度。

 int arr[][4] = {{11,12,13},{0},{0,10}};

案例

案例1:

 #include <stdio.h>
 ​
 int main ()
 {
     //先创建一个二维数组,经过论证:二维数组我们必须指定列的大小,行的大小可以省略
     int arr[][3] = {{11},{21,22},{31,32,33}};//
     //获取二维数组的大小,二维数组的大小其实就是行数
     int len = sizeof(arr) / sizeof(arr[0]);
     //遍历二维数组,因为二维数组是行列式,所以要使用到双重for循环
     //外层循环遍历外层数组,获取行
     for (int row = 0; row < len; row++)
     {
         //获取列元素的总大小
         int len2 = sizeof(arr[row]) / sizeof(int);
         //内层循环遍历内层数组,获取列(数据元素)
         for(int col = 0; col < len2;col++)
         {
             //获取元素
             printf("%-3d",arr[row][col]); // 意思是获取数组arr第row行第col列
         }
         printf("\n");
     }
      printf("\n");
     
     return 0;
 }

案例2:

 
//需求:矩阵的转置(就是将一个2行3列的数组转换为3行2列的数组)
 int main()
 {
     //准备两个数组,存放转置前后的数列
     int arr_before[2][3] = {11,12,13,14,15,16};//{{11,12,13},{14,15,16}}
     int arr_after[3][2]={0};
     //计算arr_before中行数
     int r_len = sizeof(arr_before) / sizeof(arr_before);
     // 遍历arr_before
     for(int i = 0; i < r_len;i++)
     {
         //计算arr_before中的列数
         int c_len = sizeof(arr_before[i]) /  sizeof(int));
         for(int j = 0;j < c_len ; j++)
         {   
             printf("%-4d",arr_before[i],[j]);
             //转置
             arr_atfer[j][i] = arr_before[i][j];
         }
         printf("\n");
     }
     //遍历arr_after
      for(int i = 0; i < r_len;i++)
     {
         //计算arr_bafter中的列数
         int c_len = sizeof(arr_after[i] /  sizeof(int));
         for(int j = 0;j < c_len ; j++)
         {   
             printf("%-4d",arr_after[i],[j]);
         }
          printf("\n");
     }
         printf("\n");
     retunr 0;
 }

案例3:

 
//需求:准备一个int类型二维数组,求该数组中最大的值,以及对应的行号和列号。
 #include <stdio.h>
 int main()
 {
     //准备一个二维数组
     int arr[][4] = {{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
     //创建变量:最大值、行号、列好
     int max = arr[0][0];row = 0,col = 0;
     
     //遍历集合
     for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
     {
         for (int j = 0 ; j < sizeof(arr[i]) / sizeof(arr[i][0]);j++)
         {
             //判断最大值
             if(arr[i][j] > max)
             {
                 max = arr[i][j]
                 row = i;
                 col = j;
             }
         }
     }
     printf("max=%d,row = %d,col = %d\n",max,row,col);
     return 0;
 }

标签:11,arr,int,C语言,二维,数组,sizeof
From: https://blog.csdn.net/weixin_51619876/article/details/144424108

相关文章