续上篇

上一篇文章介绍了一维数组,这篇文章我们介绍数组的剩下内容,二维数组和数组的应用。

二、二维数组

1.概念

就是有多行一维数组组成的数组,其中有两个下标。

2.语法结构

它的语法结构如下,也不复杂:

数组元素类型 数组名[行下标] [列下标];

举个例子:int arr[5][3];

3.初始化

二维数组元素初始化同样分为完全初始化和不完全初始化,此外还有按行初始化。

(1)完全初始化

将二维数组的每个元素都赋值,如下面的例子:

int arr[2][3]={1,2,3,4,5,6};

(2)不完全初始化

只将二维数组的部分元素赋值,如下面的例子:

int arr[2][3]={1,2,3};

和一维数组一样,未赋值的元素系统将自动赋值为0。

(3)按行初始化

二维数组的每一行均有初始化,注意每一行的元素要用大括号括起来,如下面的例子:

int arr3[2][3]={{1,2},{3,4},{5,6}};

关于二维数组元素初始化,还有一个注意点,就是在初始化时,可省略行,不可省略列。

举个例子:

int arr4[ ][3]={1,2,3};int arr5[ ][3]={1,2,3,4};int arr6[ ][3]={1,2,3,4,5,6}。

4.下标

二维数组的下标和一维数组一样,也是从0开始,它分为行下标和列下标。

如:int arr1[0][2],int arr2[3][0]。

5.输入并打印二维数组

这算是二维数组一个比较典型的运用,我们还是通过scanf函数和循环(for或while),printf函数来完成这一任务,代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
   int arr1[2][3]={0};//数组元素初始化
   int i,j=0;
   for(i=0;i<2;i++)
   {
     for(j=0;j<3;j++)
     {
       scanf("%d",&arr1[i][j]);
     }
   }
   for(i=0;i<2;i++)
   {
     for(j=0;j<3;j++)
     {
       printf("%d",arr1[i][j]);
     }
     printf("\n");//打印完换行
   }
   
   return 0;
}

我们在这里用的是嵌套for循环,因为二维数组是行列下标都有,就是每执行一次行循环,跑完一次列循环,无论是上面的输入循环还是下面的打印循环。

6.二维数组在内存中的存储

二维数组在内存中的存储也是连续的。

三、变长数组(VLA)

1.概念

数组大小可以用变量来确定,这里有一个注意点,就是变长数组不能初始化。

2.语法结构

数组元素类型 数组名[数组下标]

3.VS中能用变长数组的方法

首先,我们打开自己写的代码文件,如下图:

其次,我们将光标放置在右边的解决方案资源管理器那边,然后右击鼠标,点击最下面的属性,如下图我蓝笔标出来的:

然后,我们鼠标点击属性,出现了一个新的菜单栏,系统默认选择常规属性,在常规属性中,鼠标点击平台工具集,如下图:

最后,我们点击平台工具集右边的小箭头,选择第二个LLVM(clang-cl),点击应用、确定就设置完成了。这里就印证了clang支持变长数组,如图:

4.利用变长数组打印数组元素

我们来用一下变长数组,写一段代码:

#define_CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
  int n=0;//n为数组长度
  int i=0;//i为数组下标
  scanf("%d",&n);//确定数组长度
  int arr[n];//定义变长数组
  for(i=0;i<n;i++)
  {
     arr[i]=i;//通过循环遍历数组
  }
  for(i=0;i<n;i++)
  {
    printf("%d",arr[i]);
  }
   return 0;
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐