C 中的可变长度数组,尽管有常量数组边界要求
在 C 中,规定数组边界必须是常量表达式。但是,在某些代码场景中,似乎违反了此规则,但不会导致任何错误。考虑以下示例:
#include <iostream> using namespace std; int main(){ int n=10; int a[n]; for (int i=0; i<n; i++) { a[i]=i+1; cout<<a[i]<<endl; } return 0; }
根据教科书,此代码应该引发错误,因为 n 不是常量表达式。令人惊讶的是,它在 Mac 下的 Xcode4 中完美执行。如何解释这种明显的矛盾?
答案在于称为可变长度数组 (VLA) 的 C99 功能。虽然主要用于 C 语言,但某些编译器也支持 C 语言中的 VLA。在这种情况下,int a[n] 是一个在堆栈上分配空间的 VLA,类似于 int a[10]。
因此,上面的代码使用了长度可变的 n 的 VLA。此功能允许创建具有动态确定大小的数组,即使数组界限在技术上不是常量表达式。
以上是尽管存在常量数组绑定规则,为什么可变长度数组可以在该 C 代码中工作?的详细内容。更多信息请关注PHP中文网其他相关文章!