使用c99语法-变长数组完成编程入学初学者入门训练---BC103 序列重组矩阵

本文介绍了C语言的三个主要版本C89、C99和C11,强调了C99引入的变长数组特性。在C89中,数组长度必须由常量表达式指定,而在C99中,允许使用变量来定义数组长度,这种在运行时确定长度的数组称为变长数组。虽然变长数组在内存分配上与普通静态数组不同,但其容量在定义后不可更改。文章还提及了不同编译器对C99标准的支持情况,并提供了一个简单的C99语法示例,用于演示变长数组的使用。
摘要由CSDN通过智能技术生成

C99 变长数组

在《 C语言的三套标准:C89、C99和C11 》一节中我们讲到,目前经常使用的C语言有三个版本,分别是 C89、C99 和 C11。C89(也称 ANSI C)是较早的版本,也是最经典的版本,国内大学几乎都是以该版本为基础进行授课。C99 和 C11 是后来对 C89 的升级,增添了一些新内容(不多),语法更加灵活了,同时兼容 C89。各种编译器都能很好地支持 C89 标准,但对 C99 的支持却不同:开源组织的 GCC 和 Xcode 使用的 LLVM/Clang 已经支持了大部分(几乎全部)的 C99 标准,而微软的 VC、VS 对 C99 却不感兴趣,直到后来的 VS2013、VS2015、VS2017 才慢慢支持,而且支持得还不好。为什么要讨论这个问题呢?因为 C89 和 C99 对数组做出了不同的规定:
在 C89 中,必须使用常量表达式指明数组长度;也就是说,数组长度中不能包含变量,不管该变量有没有初始化。
而在 C99 中,可以使用变量指明数组长度。

变量的值在编译期间并不能确定,只有等到程序运行后,根据计算结果才能知道它的值到底是什么,所以数组长度中一旦包含了变量,那么数组长度在编译期间就不能确定了,也就不能为数组分配内存了,只有等到程序运行后,得到了变量的值,确定了具体的长度,才能给数组分配内存,我们将这样的数组称为变长数组(VLA, Variable Length Array)。普通数组(固定长度的数组)是在编译期间分配内存的,而变长数组是在运行期间分配内存的。
变长数组仍然是静态数组
注意,变长数组是说数组的长度在定义之前可以改变,一旦定义了,就不能再改变了,所以变长数组的容量也是不能扩大或缩小的,它仍然是静态数组。
————————————————
版权声明:本文为CSDN博主「婉君 喜欢DIY」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42141437/article/details/112239845
————————————————
版权声明:本文为CSDN博主「婉君 喜欢DIY」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42141437/article/details/112239845

BC103 序列重组矩阵

描述
//KiKi得到了一个n行m列的矩阵,现在他想知道第x行第y列的值是多少,请你帮助他完成这个任务。
//
//输入描述:
//第一行包含两个数n和m,表示这个矩阵包含n行m列。从2到n + 1行,每行输入m个整数(范围 - 231~231 - 1),用空格分隔,共输入n*m个数,表示矩阵中的元素。接下来一行输入x和y,用空格分隔,表示KiKi想得到的元素的位置。(1≤x≤n≤10,1≤y≤m≤10)
//
//输出描述:
//一行,输出一个整数值,为KiKi想知道的值。
//示例1
//输入:
//2 3
//1 2 3
//4 5 6
//1 2
//输出:
//2

#include <stdio.h>
int main()
{int n=0;
int m=0;
scanf("%d%d",&n,&m);
int i=0;
int j=0;
int arr[n][m];//使用c99语法,变长数组,不能初始化,具体给值也行
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&arr[i][j]);
}
}
int x=0;
int y=0;
scanf("%d",&x,&y);
printf("%d ",arr[x-1][y-1]);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cinderella-tzh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值