gpt4 book ai didi

c - 通过 ref 从结构体中的数组传回值

转载 作者:行者123 更新时间:2023-11-30 18:46:44 24 4
gpt4 key购买 nike

struct myStruct
{
int* arr;
int size;
};

void get_back(struct myStruct* my ,int* arr, int* size)
{
arr = my->arr;
*size = my->size;
}

int main()
{
struct myStruct my;
my.arr = (int*) malloc(3 * sizeof(int));
my.arr[0] = 20;
my.arr[1] = 200;
my.arr[2] = 2000;
my.size = 3;

int* ret_arr = NULL;
int size;
get_back(&my, ret_arr, &size);
free(my.arr);
return 1;
}

我的简单程序的目标是将 my.arr 中的值返回到 ret_arr 中,
由于 ret_arr=nullptr,我是否需要分配内存并将其复制到 get_back 函数内的数组中?< br/>或者我可以只指向“我的”结构内的现有数组?

这是我当前的解决方案,我复制了值。

struct myStruct
{
int* arr;
int size;
};

int* get_back(struct myStruct* my , int* size)
{
int *arr = (int*)malloc(3 * sizeof(int));
for (int i = 0; i < my->size; i++)
{
arr[i] = my->arr[i];
}
*size = my->size;
return arr;
}

int main()
{
myStruct my;
my.arr = (int*) malloc(3 * sizeof(int));
my.arr[0] = 20;
my.arr[1] = 200;
my.arr[2] = 2000;
my.size = 3;

int* ret_arr = NULL;
int size;
ret_arr = get_back(&my, &size);
free(my.arr);
free(ret_arr);
return 1;
}

最佳答案

当您释放数组时,您可能需要使用 memcpy 复制内容(来自 string.h)。您还需要包含 mallocstdlib.h

#include <string.h>
#include <stdlib.h>
// Struct definition goes here
void get_back(struct myStruct* my, int** arr, int* size)
{
*arr=malloc(my->size*sizeof(int)); //Allocate space for integers
memcpy(*arr, my->arr, my->size*sizeof(int)); //Copy integers to new array
*size=my->size;
}

该函数需要获取指向该指针的指针才能对其进行修改。

此外,您的 main 函数也需要修改。

int main()
{
struct myStruct my; // Structs are not types.
my.arr = (int*) malloc(3 * sizeof(int));
my.arr[0] = 20;
my.arr[1] = 200;
my.arr[2] = 2000;
my.size = 3;

int* ret_arr = NULL;
int size;
get_back(&my, &ret_arr, &size); //Need to pass ret_arr by reference
free(my.arr);
return 1;
}

关于c - 通过 ref 从结构体中的数组传回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50162390/

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