首页 >后端开发 >C++ >尽管存在常量数组绑定规则,为什么可变长度数组可以在该 C 代码中工作?

尽管存在常量数组绑定规则,为什么可变长度数组可以在该 C 代码中工作?

DDD
DDD原创
2024-12-16 11:40:10109浏览

Why Do Variable-Length Arrays Work in This C   Code Despite the Constant Array Bound Rule?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn