Подсчитать произведение элементов массива, которые стоят на нечетных местах
Реализую функции, которые подсчитывают произведение элементов массива, стоящих на нечетных местах. Сумма работает. Произведение - нет. Что не так? Постоянно выводится 0. В результат положил 1...
#include <iostream>
using namespace std;
// массивы чисел
double Arr_double[5] = {1.2, 2.2, 3.3, 4.4, 5.5};
float Arr_float[5] = {6.1, 7.1, 8.1, 9.1, 10.1};
long Arr_long[5] = {11, 12, 13, 14, 15};
// прототипы перегруженных функций
double product(double * Arr);
float product(float * Arr);
long product(long * Arr);
int main() {
cout << product(Arr_double);
return 0;
}
// реализация прототипов
double product(double * Arr) {
double result = 1;
for (size_t i = 0; i < sizeof(Arr); i++) {
if (i % 2 == 0) {
result *= Arr[i];
}
}
return result;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Посмотрите:
double product(double * Arr) {
double result = 1;
for (size_t i = 0; i < sizeof(Arr); i++) {
Что такое у вас Arr в функции? Указатель. Значит, sizeof(Arr) - количество байт, занимаемое указателем. 4 в 32-разрядной системе, 8 - в 64-разрядной.
Вероятно, у вас 65-разрядная программа, вы выходите за пределы переданного массива и попадаете на ноль или иную неприятность - в любом случае UB...