Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么原始数组也被排序?_C_Arrays - Fatal编程技术网

C 为什么原始数组也被排序?

C 为什么原始数组也被排序?,c,arrays,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 +

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

#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;
}
#包括
无效数组_排序(int*t,int n)
{
int-min,索引;
int*p;
用于(int i=0;i
程序的行为将产生未定义的行为。原因是在数组_排序函数中使用了未初始化的指针p。由于指针p未初始化,array_sort函数将在一些随机内存中复制数组


大多数情况下,此程序会导致分段错误。

int*p;对于(inti=0;i
,这显然是未定义的行为,不会达到预期效果。可能替换
int*p=>
int p[n]
?这个问题的“排序”部分不是很相关。您可能希望缩小它的范围,以便只询问如何制作数组的副本。您从未在
array\u sort
中分配第二个数组。否
int*p
分配一个未初始化的指针,该指针不指向任何特定的对象。如果希望它指向某个内存,则必须对其进行初始化,方法是使其指向某个现有内存,或者使用
malloc()
动态分配要使用的内存。完成后别忘了释放内存。你(不)幸运的是,你的代码运行并排序了原始数组,而不是崩溃。@Lamriniyunes读了一本C的书,写C是必须的。
int*p
,只需声明一个名为
p
int
指针,他的值是不确定的,尊重它是不确定的行为。