C语言变长数组

75 篇文章 0 订阅
C语言变长数组
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
我们知道,
传统的 C 语言是不能像C++那样支持变长数组的,也就是说数组的长度是在编译期就确定下来的,不能在运行期改变。 C99 标准定义的 C 语言新特性 ,新增的一项功能可以允许在 C 语言中使用变长数组。

C99 gives C programmers the ability to use variable length arrays, which are arrays whose sizes are not known until run time. A variable length array declaration is like a fixed array declaration except that the array size is specified by a non-constant expression. When the declaration is encountered, the size expression is evaluated and the array is created with the indicated length, which must be a positive integer. Once created, variable length array cannot change in length. Elements in the array can be accessed up to the allocated length; accessing elements beyond that length results in undefined behavior. There is no check required for such out-of-range accesses. The array is destroyed when the block containing the declaration completes. Each time the block is started, a new array is allocated.
<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>

以上就是
C99 标准 C语言 变长数组的说明.

C语变长数组,测试所用的源代码很简单,如下所示:

  1. //文件名:dynarray.c
  2. //编译环境: bloodshed dev-c/c++ 4.9
  3. #include <stdio.h>
  4. #define bzero(b,len) (memset((b), '/0', (len)), (void) 0)

  5. int main(int argc, char *argv[])
  6. {
  7.   int i, n;

  8.   n = atoi(argv[1]);
  9.   
  10.   char arr[n+1];
  11.   bzero(arr, (n+1) * sizeof(char));

  12.   for (i = 0; i < n; i++) {
  13.     arr[i] = (char)('A' + i);
  14.   }
  15.   arr[n] = '/0';
  16.   printf("%s/n", arr);

  17.   getchar();
  18.   return (0);

  19.  }


上述程序名为dynarray.c,其工作是把参数argv[1]的值n加上1作为变长数组arr的长度,变长数组arr的类型为char。然后向数组中写入一些字符,并将写入的字符串输出。


在支持c99标准的IDE上编译后, 在命令提示符下,运行: 

c:/c99_test/dynarray.exe 6

将输出: 

ABCDEF


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值