gpt4 book ai didi

c - 如何仅将输入数组的一部分用于函数?

转载 作者:太空宇宙 更新时间:2023-11-04 02:35:12 26 4
gpt4 key购买 nike

我需要将一个固定大小的数组传递给 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 中错误的屏幕截图: enter image description here

我的问题是 arr_end 不是常量(这意味着在不同的时间我想提取 arr 的不同部分)。

我怎样才能实现我想要的(使 arr_new 包含 arr 的一部分)只使用基本代码而不使用 malloc 或任何东西像这样?谢谢!

最佳答案

首先在 my_function 参数中,您声明您正在接收一个大小为 20 的数组 (double arr[20]),因为数组不能被传递它在不知道 arr 有多少元素的情况下被转换为 double* arr ( see this ) 的值,所以你应该小心否则你会得到一个段错误。推荐的方法是将 double arr[20] 更改为 double* arr 并为 arr 的大小添加另一个参数。示例:

void my_function(const size_t arr_end, double* arr, const size_t arr_size) {
...
}

其次,您正在尝试使用 VLAsMSVC仅支持 C90和我们在 C99 上添加的 VLA因此您需要使用 malloc 手动分配内存,并在使用完后使用 free 释放它。

现在这里是固定的代码:

void my_function(size_t arr_end, double* arr, size_t arr_size) {
double* arr_new = NULL;

// Allocate enough memory to hold the array
arr_new = malloc((arr_end + 1) * sizeof(double));

// Copy arr elements to arr_new
for(int i = 0; i <= arr_end; i++){
arr_new[i] = arr[i];
}

// Now you can do what you want with arr_new

// When you finished using it.
free(arr_new);
}

关于c - 如何仅将输入数组的一部分用于函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38551582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com