为什么原始数组也排序?

时间:2017-06-18 01:58:36

标签: c arrays

我不明白为什么在调用排序函数后对原始数组进行排序,即使我使用了备用数组。 我首先复制了所有元素以避免这个问题。 任何澄清都是受欢迎的。谢谢。

#include <stdio.h>

void array_sort(int* t, int n)
{
    int min, index;
    int* p;
    for (int i = 0; i < n; i++) { //to avoid changing the original array
        *(p + i) = *(t + i);
    }
    for (int i = 0; i < n - 1; i++) {
        min = *(p + i);
        index = i;
        for (int j = i + 1; j < n; j++) {
            if (*(p + j) < min) {
                min = *(p + j);
                index = j;
            }
        }
        *(p + index) = *(p + i);
        *(p + i) = min;
    }

    for (int i = 0; i < n; i++)
        printf("%i\t", *(p + i));
}

int main(void)
{
    printf("Enter number of elements to be sorted : ");
    int n;
    scanf("%i", &n);
    printf("\nEnter the numbers : ");

    int p[n];

    for (int i = 0; i < n; i++) {
        scanf("%i", p + i);
    }

    array_sort(p, n);

    printf("\n");
    for (int i = 0; i < n; i++) { //check if original array is unsorted
        printf("%i\t", *(p + i));
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

程序的行为将产生未定义的行为。原因是在array_sort函数中使用了未初始化的指针p。 array_sort函数会将数组复制到某个随机存储器中,因为指针p未初始化。

这个程序通常会导致分段错误。