将列表转换为数组

0xA*_*xAX 1 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;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试测试它时:

int* a = (int*)list_to_array(list);
printf("%d" (int)a);
Run Code Online (Sandbox Code Playgroud)

没关系.我看到第一个元素.但是当我试图获得第二或第三个元素时:

int* a = (int*)list_to_array(list);
a++;
printf("%d" (int)a);
Run Code Online (Sandbox Code Playgroud)

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

谢谢

tor*_*rak 6

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

而且,您没有实际返回指向数组的指针,而是返回数组中的第一个元素.以下代码将返回1,而不是指针数组.

int array[] {1, 2, 3, 4};
return *array
Run Code Online (Sandbox Code Playgroud)

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

void** array = (void **) malloc(sizeof(void *) * array_size); 
...
return array;
Run Code Online (Sandbox Code Playgroud)

只需确保释放array完成后使用的内存.

void **array = list_to_array(list);
// Use array
...
// Finished with array
free(array);
Run Code Online (Sandbox Code Playgroud)