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

Jef*_*eff 2 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);
}
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*aul 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;
}
Run Code Online (Sandbox Code Playgroud)