我是C语言的新手,我试图编写一个函数,该函数在给定具有每个元素新位置的数组的情况下在数组中进行排列。
我想要的例子:
int newPositions[] = {3,1,5,2,4};
int arr[] = {20,30,-1,9,1};
>> {-1,20,1,30,9}
我来自Java,所以我拥有我们想尝试的基本功能,但是当我看到无法用C返回数组时,我感到很惊讶,并且我试图找到最好的方法。在不使用过多内存的情况下做到这一点的可能方法。我曾考虑过复制数组,但是还有其他解决方案吗?
谢谢
这里看起来是这样:
#include <string.h>
void permutate(int** array, int* newPositions, int count)
{
int* arrayCopy = malloc(sizeof(int) * count);
memcpy(arrayCopy, array, sizeof(int) * count);
for (int i = 0; i < count; i++)
{
array[i] = arrayCopy[newPositions[i] - 1];
}
free(arrayCopy);
}
[请注意,C语言中的数组不知道它们的长度(这就是为什么必须传递count
的原因,因此,如果两个数组和/或size
之间都不匹配,则您的程序将执行意外的操作或崩溃。] >
有很多有关C中的数组和指针的详细信息。请仔细阅读this chapter of the famous C-FAQ。