#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
在运行时如何获取阵列号?这是一个新功能吗?
答案 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 并且,其他数组索引仍显示垃圾值。
希望,您对这个问题的解决方案满意:)