2017-06-18 78 views
0

我不明白爲什麼原始數組在排序函數調用後排序,即使我使用了一個替代數組。 我首先複製了所有元素以避免此問題。 任何澄清將受到歡迎。謝謝。爲什麼原始數組也排序?

#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; 
} 
+6

'int * p; for(int i = 0; i 'int p [n]'? – Stargateur

+0

這個問題的「排序」部分是不相關的。您可能想要縮小它,以便您只是詢問如何製作數組的副本。 – 4castle

+1

你從未在'array_sort'中分配過第二個數組。 – user2357112

回答

0

該程序的行爲將產生未定義的行爲。原因是在array_sort函數中使用了未初始化的指針p。由於指針p未初始化,array_sort函數會將該數組複製到一些隨機存儲器中。

大多數情況下,這個程序會導致分段錯誤。