C ++无法转换' int *'到' int **'

时间:2014-03-17 17:53:35

标签: c++ pointers dynamic-memory-allocation

#include <iostream>
using namespace std;

void arrSelectSort(int *[], int), showArrPtr(int *, int);
void showArray(int [] , int);

int main()
{
    int numDonations;
    int *arrPtr;
    cout << "What was the number of donations?: ";
    cin >> numDonations;
    arrPtr = new int[numDonations];
    cout << "What were the donations values?: ";
    for (int count = 0; count < numDonations; count++)
        cin >> arrPtr[count];
    arrSelectSort(arrPtr, 3);
    cout << "The donations, sorted in ascending order are: \n";
    showArrPtr(arrPtr, 3);
    cout << "The donations, in their orginal order are: \n";
    showArray(values, 3);
    system(" Pause ");
    return 0;
}

void arrSelectSort(int *array[], int size)
{
    int startScan, minIndex;
    int* minElem;

    for (startScan = 0; startScan < (size - 1); startScan++)
    {
        minIndex = startScan;
        minElem = array[startScan];
        for(int index = startScan + 1; index < size; index++)
        {
            if (*(array[index]) < *minElem)
            {
                minElem = array[index];
                minIndex = index;
            }
        }
        array[minIndex] = array[startScan];
        array[startScan] = minElem;
    }
}

void showArray(int array[], int size)
{
    for (int count = 0; count < size; count++)
        cout << array[count] << " ";
    cout << endl;
}

void showArrPtr(int *array, int size)
{
    for (int count = 0; count < size; count++)
        cout << *(array[count]) << " ";
    cout << endl;
}

这非常令人困惑,我无法弄清楚如何将动态内存分配数组传递给函数。我知道这是可能的,因为这是C ++数据包练习的一部分。当我尝试删除electort函数中的括号时,它会给我一些错误。当我尝试删除*时,它会给我带来其他错误。

1 个答案:

答案 0 :(得分:5)

void arrSelectSort(int *[], int)

第一个参数是int**类型。

你可以这样调用这个函数:

arrSelectSort(arrPtr, 3);

其中arrPtr的类型为int*。这是编译器通知您的类型不匹配。

我认为错误发生在arrSelectSort的声明中。它应该是:

void arrSelectSort(int[], int)

第一个参数现在是int*类型。这正是你需要的,指向int数组的指针。

然后您在arrSelectSort的实现中遇到了大量其他错误,但我并不特别想尝试对它们进行全部调试。

您需要将minElem设为int类型。在其他几个地方,您需要删除一定程度的间接。例如,这一行:

if (*(array[index]) < *minElem)

应该是:

if (array[index] < minElem)

等等。