не работает функция через указатели в C++

Одна функция работает нормально, а вторая нет. Суть задачи - найти произведение элементов массива с помощью функции, которая будет возвращать результат по указателям.

Код всей программы:

using namespace std; 

int* FindMax(int *arr, int *n)
{
    int* max = arr;
    for (int i=0; i<(*n); i++) 
    {   
        if ((*max)<(*(arr + i))) {
            
        (*max) = (*(arr + i));   }
        
        
    } 
    return max;
} 

int* FindProiz(int *arr, int *n)
{   
    int t = 1; 
    int* P = &t;
    for (int i=1; i<(*n); i++) 
    {   
        (*P)= (*P) * (*(arr + i)); 
    } 
    return P;
}


int main()
{   
    int n = 0; 
    cin>>n;
    
    
    int *arr = new int [n]; 
    for (int i=0; i<n; i++) 
    { 
        cout<<"arr["<<i<<"] = "; 
        cin>>(*(arr + i)); 
        cout<<endl; 
    }
    
    cout<<"Max = "<< *(FindMax(arr, &n))<<endl; 
    cout<<"Proiz = "<< *(FindProiz(arr, &n))<<endl; 
} 

Ответы (1 шт):

Автор решения: Harry

Вобщем, так. Работа с указателями не означает, что надо делать через указатели всё. Если это учебное задание - то от вас явно ждут просто умения работать с массивом через указатель. Так что я бы исправил ваш код так:

int* FindMax(int *arr, int n) //функция для нах-ия максимума
{
    int* max = arr;
    for (int i = 1; i< n; i++)
        if (*max < *(arr + i)) max = arr + i;
    return max;
}

int FindProiz(int *arr, int n) //функция для нах-ия произведения
{   
    int P = 1;
    for (int i = 0; i < n; i++)
        P *= *(arr + i);
    return P;
}

int main()
{   
    int n = 0;                              //вводим кол-во эл-ов,потом их сравним
    cout<<"Размерность массива n = ";
    while (!(std::cin >>n && n>0))
    {
        cin.clear();
        while(cin.get()!='\n');
        cout<<"ВВЕДЕНО НЕВЕРНОЕ ЗНАЧЕНИЕ"<<endl;
        cin.clear();
    }
    cout << endl;
    int * arr = new int[n];                   //иниз-ем массив указателей
    for(int i = 0; i < n; i++)
    {
        cout<<"arr["<<i<<"] = ";
        while (!(std::cin >> *(arr + i)))
        {
            cin.clear();
            while(cin.get()!='\n');
            cout<<"ВВЕДЕНО НЕВЕРНОЕ ЗНАЧЕНИЕ"<<endl;
            cin.clear();
        }
    }

    cout<<"Max = "  << *FindMax(arr, n)  << endl;
    cout<<"Proiz = "<< FindProiz(arr, n) << endl;
}
→ Ссылка