【发布时间】:2016-07-24 11:36:15
【问题描述】:
我需要将一个恒定大小的数组传递给 C 中的函数,但只使用该数组的一部分。具体来说,下面的伪代码解释了我的情况:
void my_function(int arr_end,double arr[20]) {
Create new array arr_new that contains elements 0 to arr_end or arr
Use arr_new
}
到目前为止,我尝试执行以下操作:
void my_function(int arr_end,double arr[20]) {
double arr_new[arr_end+1];
int i;
for(i=0;i<=arr_end;i++){
arr_new[i] = arr[i];
}
// Now I can do what I want with arr_new
}
但我得到了错误:int arr_end expression must have a constant value
.这是 Visual Studio Community 2015 中错误的屏幕截图:
我的问题是arr_end 不是恒定的(这意味着在不同的时间我想提取arr 的不同部分)。
我怎样才能实现我想要的(使arr_new 包含arr 的一部分)只使用基本代码而不使用malloc 或类似的东西?谢谢!
【问题讨论】:
-
Cannot reproduce. 你确定这个代码块抛出了错误吗?
-
我认为数据类型有冲突,double arr_new 和 int arr_end
-
您使用的是符合 C99 标准的编译器吗?
-
呃,是的,Visual Studio isn't C99 compliant,所以不支持 VLA。只需将 VLA 替换为
malloc和free。查找如何执行此操作,然后在出现错误时发布您的新代码。 -
好吧,您可以声明另一个固定大小的数组(似乎是最大值为 20)并仅使用其中的
arr_end元素...