c/c++语言开发共享关于C中的数组

我写了以下代码(参见问题的代码注释),

#include int main() { int size; scanf("%d",&size); int arr[size]; /*is it a valid statement?*/ for(int i=1;i<=size;i++) { scanf("%d",&arr[i]); printf("%d",arr[i]); } return 0; } 

    使用非常量数组大小是有效的C99但不是C90。 有一个较旧的gcc扩展允许它。

    请注意,利用这一点可以更加难以检查内存分配是否成功。 将它与用户提供的值一起使用可能并不明智。

    您不能像这样在C90中分配动态数组。 您必须使用malloc动态分配它,如下所示:

     int* array = (int*) malloc(sizeof(int) * size); 

    您还可以从0开始索引数组而不是1,因此for循环应该像这样开始:

     for(int i = 0; i < size; i++) 

    如果你使用malloc方法,你还需要在完成后释放内存:

     free(array); 

    也,

    C数组索引从0开始,而不是从1开始,并且不包括size

     int i; for(i=0 ; i < size ; i++) // Notice the < and the 0 { //... } 

    编译器尝试在编译时计算int arr[size] 。 在这种情况下,arr在堆栈上分配,因此编译器希望提前知道其大小。 相反,您需要使用malloc在堆上分配arr,就像这样。

     #include int main() { int size; scanf("%d",&size); int *arr = malloc(sizeof(int) * size); for(int i=1;i<=size;i++) { scanf("%d",&arr[i]); printf("%d",arr[i]); } free(arr); return 0; } 

    有关何时使用malloc更多信息,请参阅此文章

    如果大小不变,这将是有效的。 否则,你应该做DShook所说的。 另外,确保你在某个时候释放(数组),否则你的程序会泄漏内存。

      以上就是c/c++开发分享关于C中的数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

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

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/545680.html

      (0)
      上一篇 2021年1月10日
      下一篇 2021年1月10日

      精彩推荐