指向不同指针的指针(计数排序)

时间:2017-06-03 13:22:14

标签: c pointers

我在计算排序时遇到了一些问题。我试图重新分配一些指针,但这不起作用。我知道我可以使用循环来复制来自" sorted_arr"的排序值。进入我的价值观#34;数组,但我想了解为什么我的版本不起作用。提前谢谢!

void countingsort(unsigned int *values, unsigned long nofelements) {
    unsigned int *aux_arr;
    unsigned int *sorted_arr;
    unsigned int *temp_arr;
    long i;

    aux_arr = calloc((MAXSORTVALUE + 1), sizeof(*aux_arr));
    assert(aux_arr != NULL);
    sorted_arr = malloc(nofelements * sizeof(*sorted_arr));
    assert(sorted_arr != NULL);

    for (i = 0; i < nofelements; i++) { 
        aux_arr[values[i]]++;
    }

    for (i = 1; i <= MAXSORTVALUE; i++) {
        aux_arr[i] = aux_arr[i] + aux_arr[i - 1];
    }

    for (i = nofelements - 1; i >= 0; i--) {
        sorted_arr[aux_arr[values[i]] - 1] = values[i];
        aux_arr[values[i]]--;
    }

    temp_arr = values; // here is the reassignment

    values = sorted_arr; // and here

    free(temp_arr);
    free(aux_arr);
}

1 个答案:

答案 0 :(得分:0)

values是一个指向调用函数发送的数组的指针。因此,更改values的值不会更改调用函数中的实际数组。这导致调用函数中的实际数组不会改变的问题 要将更改应用于原始数组,请将指针指针作为参数int **,并在调用函数中更改指针的值,或修改values数组本身。