2016-04-27 15 views
2

我是C编程新手,想知道是否有办法阻止更改数组的值。C - 如何在排序时不更改int数组的值

我有一个数组:

int *array = makeArray(); 

然后我申请一个排序方法,此阵:

sortingMethod1(array); 

当我打电话:

sortingMethod2(array); 

列表已经排序,我无法对第二种排序方法进行基准测试。

我想知道是否有一种方法将相同的数组传递给两个函数,而不对下一个函数进行排序。

如果任何人都可以帮助我看起来很简单的问题,我将不胜感激。

+0

数组是如何创建的?通过'malloc()'?它只是返回一个“静态”变量? – Leandros

+0

已经得到了我正在寻找的答案,但它是用malloc创建的,它返回随机大小的(数组)变量,随机整数 – tester

回答

5

如果排序方法就地对数组进行排序,则需要向它们发送副本。为避免代码重复,最好将复制提取到效用函数中:

void benchmark(int *array, size_t array_len, void (*method)(int *)) { 
    int *array_copy = malloc(array_len * sizeof(int)); 
    memcpy(array_copy, array, array_len * sizeof(int)); 

    /* you can initialize a timer here */ 
    method(array_copy); 
    /* you can output elapsed time here */ 

    free(array_copy); 
} 

// ... 
int *array = makeArray(); 
benchmark(array, array_len, sortingMethod1); 
benchmark(array, array_len, sortingMethod2); 
+1

那么这是一个快速的答案,正是我所期待的。谢谢! – tester

+3

@tester请“接受”你喜欢的最佳答案。这就是如此工作! –

2

您可以按照建议复制数组。 另一种方法是创建一个额外的指针数组,每个指针指向原始数组中的数据。在排序时,查看所指向的数据,但更改指针的位置而不是数据本身。 在内存方面可能会更有效率。

我不知道如何在不使用某种副本进行变更的情况下对数组进行排序的方法,无论是数据还是指向它的指针。在C中,数组非常类似于指向内存的指针。