2015-02-10 226 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