对指针数组进行排序
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,对不起,你说得对。以上是关于对指针数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章