c/c++语言开发共享难以理解C中的可变长度数组

当我发现数组大小必须在声明时给出或者在运行时使用malloc从堆分配时,我正在读一本书。我在C中编写了这个程序:

#include int main() { int n, i; scanf("%d", &n); int a[n]; for (i=0; i<n; i++) { scanf("%d", &a[i]); } for (i=0; i<n; i++) { printf("%d ", a[i]); } return 0; } 

这段代码工作正常。

我的问题是这个代码是如何正常工作的。不是违反C的基本概念,数组大小必须在运行时之前声明或在运行时使用malloc()分配它。我不做这两件事中的任何一件,那它为什么它正常工作?

我的问题的解决方案是C99支持的可变长度数组,但是如果我玩我的代码并将语句放入int [n]; 在scanf(“%d,&n)之上;然后它停止工作为什么它如此。如果C中支持可变长度数组?

    C99标准支持可变长度数组 。 这些数组的长度在运行时确定。

    从C99开始,您可以在块范围内声明可变长度数组。

    例:

     void foo(int n) { int array[n]; // Initialize the array for (int i = 0; i < n; i++) { array[i] = 42; } } 

    只要您在使用之前声明了数组并为其分配了内存,C就会很高兴。 C的“特性”之一是它不validation数组索引,因此程序员有责任确保所有内存访问都是有效的。

      以上就是c/c++开发分享难以理解C中的可变长度数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562655.html

      (1)
      上一篇 2021年2月5日
      下一篇 2021年2月5日

      精彩推荐