2017-02-12 2 views
2

Итак, я совершенно не знаком с указателями, я прошу прощения за это, я должен передать массив указателей и получить режим этого массива. После того, как массив проходит как набор указателей, я не могу манипулировать массивом, чтобы найти этот режим, все, что я пытаюсь получить в результате синтаксической ошибки.Как найти режим массива, передав указатель этого массива функции? C++

EDIT: я изменил список на массив указателей, и я получаю ошибку времени выполнения.

int main() 
{ 
int size=0; 
int *list[size]; 
cout<<"Please enter the size of your array: "; 
cin>>size; 
cout<<"\nPlease enter the numbers in your list seperated by spaces: "; 
for(int i=0;i<size;i++) 
{ 
    cin>>*list[i]; 
} 
cout<<endl; 


int mode=getMode(list,size); 
cout<<"\n"<<mode<<endl; 
return 0; 
} 

int getMode (int* list[], int arraySize) 
{ 
    cout<<"The array you entered is listed below\n "<<list[0]; 
    for(int i=0;i<arraySize;i++) 
     {cout<<setw(3)<<list[i];} 
    int *number=list[0]; 
    int count1=0; 
    int count2=0; 
    int mode=0; 
    for(int j=1;j<arraySize;j++) 
     { 
      for(int i=1;i<arraySize;i++) 
       { 
        if(list[i]==number) 
         { 
          count1++; //counts the number of instances that the number occurs 
         } 
       } 
      if(count1>count2) 
       { 
        mode= *list[j]; 
        count2=count1; 
       } 
      count1=0; 
     } 
    return mode; 
} 
+0

'list' представляет собой массив целых чисел, а не массив указателей. – Barmar

+0

Когда вы передаете массив функции, он автоматически распадается на указатель. Вам не нужно использовать '& list'. – Barmar

+0

Когда я пытаюсь сделать список в обычный массив int, а затем передаю его без ссылочного тега, консоль сообщает мне, что он не может преобразовать тип int * в int ** в вызове функции. –

ответ

1

При передаче массива в функцию, она автоматически распадается на указатель, так что вам не нужно использовать &list. И в функции вы не должны объявлять ее int *list[], она должна быть только int list[] или int *list.

Кроме того, в функции getMode() необходимо учитывать число совпадений list[j]. Вы просто считаете повторения number, что составляет list[0].

#include <iostream> 
#include <iomanip> 
using namespace std; 

int getMode (int list[], int arraySize) 
{ 
    cout<<"The array you entered is listed below\n "<<list[0]; 
    for(int i=0;i<arraySize;i++) 
     {cout<<setw(3)<<list[i];} 
    int count1=0; 
    int count2=0; 
    int mode=0; 
    for(int j=0;j<arraySize;j++) 
     { 
      for(int i=0;i<arraySize;i++) 
       { 
        if(list[i]==list[j]) 
         { 
          count1++; //counts the number of instances that the number occurs 
         } 
       } 
      if(count1>count2) 
       { 
        mode= list[j]; 
        count2=count1; 
       } 
      count1=0; 
     } 
    return mode; 
} 

int main() 
{ 
    int size; 
    int *list; 
    cout<<"Please enter the size of your array: "; 
    cin>>size; 
    list=new int[size]; 
    cout<<"\nPlease enter the numbers in your list seperated by spaces: "; 
    for(int i=0;i<size;i++) 
     { 
      cin>>list[i]; 
     } 
    cout<<endl; 

    int mode=getMode(list,size); 
    cout<<"\n"<<mode<<endl; 
    return 0; 
} 

DEMO

+0

Спасибо, Бармар, ты очень помог. Есть ли способ ответить на этот вопрос? –

+0

Нажмите галочку рядом с ответом, чтобы принять ее. – Barmar

Смежные вопросы