将列表转换为数组

标签 c arrays list

我有将列表转换为数组的函数:

void* list_to_array(SList* list)
{
     int i;
     int array_size = list_get_length(list);

     void* array[array_size];

     for (i = 0; i < array_size; i++)
     {
      array[i] = list_get_n_data(list,i);
     }

     return *array;
}

但是当我尝试测试它时:

int* a = (int*)list_to_array(list);
printf("%d" (int)a);

没关系。我看到第一个元素。但是当我尝试获取第二个或第三个元素时:

int* a = (int*)list_to_array(list);
a++;
printf("%d" (int)a);

我看到第一个元素 + 4。如果我尝试获取第三个元素,我看到第一个元素值 + 8 等等...为什么?怎么了?

谢谢

最佳答案

您正在返回指向堆栈内存位置的指针。一旦函数返回,该内存区域就不再有效。

此外,您返回的不是实际返回数组的指针,而是数组中的第一个元素。以下代码将返回 1,而不是数组的指针。

int array[] {1, 2, 3, 4};
return *array

您可能只需要对代码进行最少的更改即可使其正常工作。

void** array = (void **) malloc(sizeof(void *) * array_size); 
...
return array;

只需确保在使用完array 时释放内存。

void **array = list_to_array(list);
// Use array
...
// Finished with array
free(array);

关于将列表转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3513626/

相关文章:

javascript - 此函数中 Array() 的上下文

python - 在 SWIG 中,如何在没有 typemaps.i 的情况下使用 int * 变量

c - 函数指针签名不匹配,执行程序时仍然没有遇到任何问题

java - 使用 Java 从类数组创建类的新实例

java - 从 map 列表列表中收集特定键的值 List<String,

Python,如何根据总和对列表进行排序

list - 是否可以重载接受 Scala 列表的构造函数?

c - 如何在 C 中通过引用来引用二维字符数组

C程序没有正确添加 float

arrays - csh向数组中添加字符串,空格问题