2015-09-10 1 views
0

Когда я пытаюсь отобразить результаты тестов в функции 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; 
} 
+2

Подсказка 1: параметр функции 'int * array []' действительно есть 'int ** array'. Подсказка 2: посмотрите в 'std :: vector', поэтому вам не нужно беспокоиться об этом. – juanchopanza

+0

Ваша функция сортировки ошибочна, но почему вы все равно передаете указатель на массив? Что не так с обычным способом 'void sortArray (int * array, int size)'? – john

+0

Я думал, что при использовании массивов вам нужно было указать их «[]» в прототипе функции и заголовке, это неверно? – Cameron

ответ

0

Ошибка: Массив состоит scoreNUMS элементы, то первый из них является testScores [ 0] - первый индекс равен нулю. И последний индекс scoreNUMS-1

Вы должны написать

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

PS: Вы можете использовать следующий прототип:

void sortArray(int [], int); 

UPD: Передача массива в функцию выполняется передавая указатель на первый элемент массива. (Ваш массив не копируется при передаче его функции)

И запустить функцию таким образом: sortArray (testScores, scoreNUMS);

+0

«массивы C++ всегда передаются по ссылке». Что здесь происходит, так это то, что передается указатель, а не ссылка на массив. «Ссылка» имеет другое значение в C++. – juanchopanza

+0

@juanchopanza, извините, ваши жесты. – BogolyubskiyAlexey