C99可变长度数组维基百科示例

时间:2011-12-29 05:43:54

标签: c arrays c99

我在维基百科上看到了这个C99可变长度数组的例子:

float read_and_process(int n)
{
    float vals[n];

    for (int i = 0; i < n; i++)
        vals[i] = read_val();
    return process(vals, n);
}

这是不正确的?我的印象是变长数组仍然只是指针,这意味着上面的代码将过期的指针值传递给process(...)函数。

2 个答案:

答案 0 :(得分:6)

指针尚未过期。它是指向有效内存的指针,直到函数read_and_process结束。这意味着在调用流程时仍然会定义它。

这将是无效使用的示例:

float read_and_process(int n)
{
    float vals[n];

    for (int i = 0; i < n; i++)
        vals[i] = read_val();
    return vals;
}

答案 1 :(得分:1)

不要忘记包含所有read_and_process()自动变量(包括float vals[n])的堆栈帧仍然有效,并且在执行process()时在内存中。