C语言—变长数组

作者:追风剑情 发布于:2019-10-13 18:25 分类:C

示例

  1. //开发工具:Dev-C++ 5.11
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. #define ROWS 2
  7. #define COLS 3
  8.  
  9. //下面两种声明形参方式等效
  10. //int sum2d(int rows, int cols, int ar[rows][cols]);
  11. int sum2d(int, int, int ar[*][*]);
  12.  
  13. int main(int argc, char *argv[])
  14. {
  15. int junk[ROWS+1][COLS+1] = {
  16. {2, 4, 6, 8},
  17. {3, 5, 7, 9},
  18. {12,10,8, 6}
  19. };
  20. /* 变长数组(VLA) */
  21. //这里的“变”指的是:在创建数组时,可以使用变量指定数组的维度
  22. int rs = 3;
  23. int cs = 4;
  24. /*
  25. 变长数组(variable-length array, VLA)是C99新增特性。
  26. C11把变长数组作为一个可选特性,而不是必须强制实现的特性。
  27. 变长数组必须是自动存储类别,不能使用static或extern存储类别说明符.
  28. 不能在声明中初始化它们.
  29. const和数组大小
  30. const int SZ = 80;
  31. double ar[SZ]; //是否允许?
  32. C90标准不允许(也可能允许)。数组的大小必须是给定的整型常量表达式,
  33. 可以整型常量组合,如20、sizeof表达式或其他不是const的内容。
  34. 由于C实现可以扩大整型常量表达式的范围,所以可能会允许使用const,
  35. 但是这种代码可能无法移植。
  36. C99/C11标准允许在声明变长数组时使用const变量。所以该数组的定义必须在
  37. 块中的自动存储类别数组。
  38. 变长数组还允许动态内存分配,这说明可以在程序运行时指定数组的大小。普通
  39. C数组都是静态内存分配,即可编译时确定数组的大小。由于数组大小是常量,所以
  40. 编译器在编译时就知道了。
  41. */
  42. int varr[rs][cs];
  43. int i, j;
  44. for (i=0; i<rs; i++)
  45. for (j=0; j<cs; j++)
  46. varr[i][j] = i*j+j;
  47. /* end */
  48. printf("Sum of all elements = %d\n", sum2d(rs, cs, junk));
  49. printf("[VLA]Sum of all elements = %d\n", sum2d(rs, cs, varr));
  50. system("pause");
  51. return 0;
  52. }
  53.  
  54. int sum2d(int rows, int cols, int ar[rows][cols])
  55. {
  56. int r;
  57. int c;
  58. int tot = 0;
  59. for (r = 0; r < rows; r++)
  60. for (c = 0; c < COLS; c++)
  61. tot += ar[r][c];
  62. return tot;
  63. }

运行测试 
1111.png

标签: C语言

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号