Я пытаюсь написать функцию, которая отличает массив от int
s до double
. Он принимает постоянный указатель на исходный массив int[]
(во избежание нежелательных изменений?) И возвращает указатель на массив отлитых double[]
. Однако код, который я написал, кажется, не работает. Может ли кто-нибудь указать, что с ним не так?C++: передающие и возвращающие указатели на массивы - код не работает
#include <iostream>
using namespace std;
double* castToDouble(const int *input);
int main(){
int integers[] = {1,2,3,4};
double *doubles = castToDouble(integers);
cout << "numElements in doubles: " << sizeof(doubles)/sizeof(double) << endl;
for(int i = 0; i < sizeof(doubles)/sizeof(double); i++){
cout << doubles[i] << endl;
}
return 0;
}
double* castToDouble(const int *input){
// Obtain the number of elements in input.
int numElements = sizeof(input)/sizeof(int);
double *doubleAry = new double[numElements];
cout << "numElements in input: " << numElements << endl;
for(int i = 0; i < numElements; i++){
doubleAry[i] = static_cast<double>(input[i]);
}
return doubleAry;
}
Выход программы заключается в следующем:
numElements in input: 2
numElements in doubles: 1
1
кажется numElements пересчитанного произвольными тоже. Я довольно новичок в C++ и не могу точно определить проблему. Заранее спасибо.
'SizeOf (вход)/SizeOf (INT)' не дает размер массива. Это эквивалентно 'sizeof (int *)/sizeof (int)' – Jarod42
Имея только указатель на первый элемент, невозможно определить, на сколько элементов указано. 'sizeof (doubleles)/sizeof (double)' не работает должным образом в этом контексте. – Chad
Вы должны прекратить использовать эту бессмысленность 'sizeof'. Либо передайте размер массива в виде отдельного аргумента, либо переключитесь на 'std :: vector'. – CoryKramer