对指针数组进行排序

Posted

技术标签:

【中文标题】对指针数组进行排序【英文标题】:Sorting through array of pointers 【发布时间】:2015-09-10 13:42:57 【问题描述】:

当我尝试在函数 sortArray 中显示考试成绩时,我只能访问内存地址。如何访问分数的值? sortArray 函数整体是否正确?

#include <iostream>
using namespace std;

void sortArray(int *[], int);

int main()

    int *testScores = nullptr;
    //dynamically allocate an array
    int scoreNUMS;
    int score;


    cout << "Please enter the total number of test scores" << endl;
    cin >> scoreNUMS;

    testScores = new int[scoreNUMS];
    //dynamically allocates an array large enough to hold scoreNUMS

    for(int i = 1; i <= scoreNUMS; i++)
    
        cout << "Enter student " << i << "'s test score" << endl;
        cin >> score;
        if (score <= -1)
        
            cout << "Please enter positive numbers only!" << endl;
        
        *(testScores + i) = score;
        //puts the input score in the array


    

    sortArray(&testScores, scoreNUMS);

    return 0;

我不确定下面的函数是否正确,因为我不知道在哪里放置 * 和 &

void sortArray(int *array[], int size)

    bool swap;
    int temp;

    do
    
        swap = false;
        for(int count = 0;count < (size - 1); count++)
        
            if(array[count] > array[count + 1])
            
                temp = *array[count];
                array[count] = array[count + 1];
                array[count + 1] = &temp;
                swap = true;

            
        
    while(swap);

    for(int i = 0; i < size; i++)
    cout << *(array + 1) << endl;

【问题讨论】:

提示1:函数参数int *array[]确实是int** array。提示 2:查看std::vector,这样您就不必担心这类事情了。 你的排序函数肯定是错误的,但你为什么要传递一个指向数组的指针呢?正常方式void sortArray(int *array, int size)有什么问题? 我认为在使用数组时,您必须在函数原型和标头中使用“[ ]”来指定它们,这是不正确的吗? @Cameron 是的,这是不正确的。我的第一条评论的第一部分是指在函数参数列表中,T[] 类型的参数实际上是T*。 C++ 从 C 继承了这种怪异之处。但testscores 只是一个指针,它不是一个数组。它指向new[]返回的数组的第一个元素,但它仍然只是一个指针。 @juanchopanza 非常感谢!我正在编辑 rn 【参考方案1】:

错误: 数组由 scoreNUMS 个元素组成,第一个是 testScores[0] - 第一个索引为零。最后一个索引是 scoreNUMS-1

你必须写

for(int i = 0; i < scoreNUMS; i++)

PS:你可以使用下一个原型:

void sortArray(int [], int);

UPD: 将数组传递给函数是通过将指针传递给数组的第一个元素来执行的。 (当你将它传递给函数时,你的数组不会被复制)

并以这种方式运行函数:sortArray(testScores, scoreNUMS);

【讨论】:

"数组是 C++ 总是通过引用传递。"这里发生的是传递指针,而不是对数组的引用。 “引用”在 C++ 中有不同的含义。 @juanchopanza,对不起,你说得对。

以上是关于对指针数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

对字符串指针数组进行排序

如何根据它们指向的值对双指针数组进行排序?

冒泡排序——用指针实现

Java中怎么对数组中的字符串进行排序

三指针(三指针排序只有三种元素的数组)--12--三指针--颜色分类

如何在C中对指向char的指针数组进行qsort?