У меня возникли проблемы с созданием простой программы. Программа запрашивает количество входящих значений для сбора (которое используется для создания массива соответствующего размера), собирает значения и вычисляет произведение всех чисел, позиция которых равна> = 1. Проблема заключается в том, что независимо от того, какой размер (т. е. который контролирует размер созданного массива), размер массива всегда указывается как 4. Например, если собрано 10 входов, создается массив размером 10, но проверка размера массива будет равна 4.Как определить размер массива?
Это код:
int main() {
double *aNumberArray = 0;
aNumberArray = askNumbers();
int position = 0;
position = sizeof(aNumberArray);
for (int i = 0; i < position; i++) {
cout << aNumberArray[i] << endl;
}
cout << "The product of your numbers is " << productOfArray(aNumberArray, position) << endl;
delete[] aNumberArray;
return 0;
}
double *askNumbers() {
int size;
double *numbers ;
cout << "Product of the numbers which positions are n >= 1" << endl;
cout << "How many numbers would you like to multiply? ";
cin >> size;
numbers = new double[size];
cout << "Type in your numbers: " << endl;
for (int i = 0; i < size; i++) {
cout << "Number " << i + 1 << ": ";
cin >> numbers[i];
}
return numbers;
}
double productOfArray(const double anArray[], int size) {
const double number = 1;
double product = 0;
if (size >= 1) {
product = anArray[size] * (productOfArray(anArray, size - 1));
}
else if (size == 0)
return number;
return product;
}
Это ключ, что 'sizeof' не делать то, что вы думаете, что делает, и это время, чтобы сделать некоторые исследования. – chris
sizeof не возвращает переменную int, указывающую, сколько элементов находится в массиве? – Silvestrini
Нет, и он не задает массив вместо указателя. Это даже не приводит к 'int', а' size_t'. – chris