我在维基百科上看到了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(...)函数.
指针尚未过期.它是指向有效内存的指针,直到函数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)