C语言之数组(二)
续上篇
上一篇文章介绍了一维数组,这篇文章我们介绍数组的剩下内容,二维数组和数组的应用。
二、二维数组
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;
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)