2015-02-10 74 views
-3

首先,我是C++的新手。我試圖編寫一個函數,它執行「冒泡排序」按升序對整數數組進行排序。作爲一項練習,我想按價值調用這個數組。 所以我改變了原來的函數聲明從 int upsort(int arr[], int larrint const* arr[], int const larr,但 沒有我從const int*' to int錯誤「無效的轉換。 有一個簡單的方法來解決這個問題?從int到const的轉換int

int upsort(int const* arr[], int const larr) 
{ int temp; 
    bool switched= false; 
    do 
    {  switched= false; 
      for (int i=0; i < larr-1; i++) 
      { 
       if(arr[i] > arr[i+1]) 
       { 
        temp = arr[i]; 
        arr[i] = arr[i+1]; 
        arr[i+1] = temp; 
        switched = true;    
       } 
      } 
    } 
    while (switched == true);  
} 
+4

'int const * arr []'是*指針*的數組。我想你想'int const arr []'。 – 2015-02-10 19:50:09

+0

解決這個問題的一個簡單方法是將'int const * arr []'改回到'int arr []'。 – emlai 2015-02-10 19:53:20

+0

備註 - 您的'切換的'變量根本沒有被用來停止排序。 – PaulMcKenzie 2015-02-10 19:55:08

回答

1

我不知道你的意思是「按值調用數組」; C++不支持按值傳遞C風格的數組,你有什麼,當你寫道:

int upsort(int arr[], int const larr) 

其實:

int upsort(int* arr, int const larr) 

第一個參數是一個指針,而不是一個數組。當你添加一個*時,你最終會得到一個指針(它可能是指針數組的第一個元素),所以arr[i]是一個指針,而不是int

當然,你不希望int const arr[]int const* arr(它們都是指向const int的指針),因爲如果你正在對數組進行排序,那麼你正在修改它,所以它不應該是const。

+0

我的意思是「按值調用數組」是,我希望函數不要改變輸入數組,就像在函數外部定義的變量一樣,並且該函數是通過值調用的在函數執行後沒有改變。我知道這在我的例子中沒有多大意義,但我只是想知道我該如何做到這一點。 – 2015-02-12 10:34:05

+0

@ W.Smith你的意思是你想排序數組的本地副本,然後把它扔出去?這沒有什麼意義。使用'std :: vector'(這是一個完整的第一類對象),你可以通過值來獲取矢量,對它進行排序,然後返回它。使用C風格的數組,你需要一個'int const *'參數給數組,爲它找到內存,將數組複製到內存中,對它進行排序,然後返回一個'int *'指向這個內存。尋找它的記憶是棘手的部分。 – 2015-02-13 11:14:38