69 C语言变长数组

来源:互联网 发布:如何编程游戏的代码 编辑:程序博客网 时间:2024/05/22 04:47

C学习网:链接->C学习网

C训练网:链接->C训练网

目前使用的C语言有两个版本,C89和C99。C89(也称ANSI C)是较早的版本,也是最经典的版本,国内大学几乎都是以该版本为基础进行授课。C99是后来对C89的升级,增添了一些内容,语法更加灵活,同时兼容C89。关于C语言标准的更多内容请访问:C语言的发展及其版本

各种编译器都遵循C89标准,但对C99的支持却不同:开源组织的GCC已经支持了大部分的C99标准,而微软的VC、VS对C99却不感兴趣(后来的VS2013、VS2015才慢慢支持)。

为什么要讨论这个问题呢?因为C89和C99对数组做出了不同的规定:在C89中,必须使用数值常量指明数组长度,不能使用变量(不管变量有没有被初始化);而在C99中,可以使用变量指明数组长度。

下面的代码使用数值常量指明数组长度,在任何编译器下都能编译通过:
  1. int a[10]; //长度为10
  2. int b[3*5]; //长度为15
  3. int c[4+8]; //长度为12
下面的代码使用变量指明数组长度,在C-Free 5.0、GCC下编译通过,而在VC 6.0、VS2010下会报错:
  1. int m = 10, n;
  2. scanf("%d", &n);
  3. int a[m], b[n];
变长数组仍然是静态数组,一旦确定长度后就不能改变。

在实际编程中,有时数组的长度不能提前确定,如果这个变化范围小,那么使用数值常量定义一个足够大的数组就可以,如果这个变化范围大,就可能会浪费空间,这时就可以使用变长数组。请看下面的代码:
纯文本复制
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n;
  5. printf("Input string length: ");
  6. scanf("%d", &n);
  7. fflush(stdin);//清空缓冲区
  8. char str[n];
  9. printf("Input string: ");
  10. gets(str);
  11. puts(str);
  12. return 0;
  13. }
在C-Free 5.0下的运行结果:
Input string length: 30↙
Input string: http://c.biancheng.net↙
http://c.biancheng.net
原创粉丝点击