运行时的数组初始化

时间:2017-01-24 09:16:03

标签: c arrays

code link

#include <stdio.h>

int main(void) {
    // your code goes here
    int a = 2;
    int b = 3;
    int c;
    c = a + b;
    int arr[c];
    arr[5] = 0;
    printf("%d",arr[5]);
    return 0;
}

输出为0

在运行时如何获取阵列号?这是一个新功能吗?

3 个答案:

答案 0 :(得分:3)

这是一个可变长度数组。它们是在1999年C版标准中引入的。

可悲的是,对它们的支持进展缓慢,以至于2011年版本使它们成为一个可选功能(但它们仍然是标准化的) 1

尽管看起来很酷,但他们还是有一个重要的警告。如果大小超过#34;它们会导致您溢出调用堆栈。因此,使用它们时需要小心。

1 一些编译器供应商有抵抗力,因此可以选择安抚它们。微软是对此的完整案例研究。

答案 1 :(得分:1)

此功能(可变长度数组)已在C99中引入。但是目前这仍然是依赖于编译器的行为。一些编译器(如gcc)支持它。有些人(比如msvc)没有。

BTW,代码中的<com.lapism.searchview.SearchView android:id="@+id/searchView" android:layout_width="match_parent" android:layout_height="match_parent" /> 超出了范围。最后一个元素应为arr[5]

答案 2 :(得分:-1)

不要混淆(静态/固定内存分配)&amp; (动态内存分配)概念:)

让我清楚你的概念兄弟

与以下问题相关,

                           C supports two type of array. 

1. 静态数组 - 在“COMPILE TIME”分配内存。

2. 动态数组 - 在“RUN TIME”分配内存。

问。如何判断数组是静态还是动态?

<强>答。        数组声明语法: -

         int array_Name[size];     //size defines the size of block of memory for an array;

所以,即将到来 - &gt;

要点1.如果在编译时给阵列大小,则为“静态内存分配”。它也被称为“固定大小的内存分配”,因为大小永远不会改变。 这是C中ARRAY的限制。

离。   int arr[10]; //10 is size of arr which is staticly defined int brr[] = {1000, 2, 37, 755, 3}; //size is equal to the no. of values initilizes with.

第2点。如果在编译时给阵列大小,则为动态内存分配。            它是通过stdlib.h中定义的malloc()函数实现的。

现在,它是您的代码的澄清: -

 #include <stdio.h>

    int main(void) {
        // your code goes here
        int a = 2;
        int b = 3;
        int c;
        c = a + b;             //c is calculated at run time
        int arr[c];           //Compilor awaiting for the value of c which is given at run time but,
        arr[5] = 0;           //here arr is allocated the size of 5 at static(compile) time which is never be change further whether it is compile time in next statements or run time.
        printf("%d",arr[5]);  
        return 0;
    }

因此,数组(大小为5)在arr [5]处保持值0 并且,其他数组索引仍显示垃圾值。

希望,您对这个问题的解决方案满意:)