C++:传递和返回指向数组的指针-代码不起作用

C++: passing and returning pointers to arrays - code not working

本文关键字:数组 指针 不起作用 代码 返回 C++      更新时间:2023-10-16

我正试图编写一个函数,将ints的数组强制转换为doubles。它接受一个指向原始int[]数组的常量指针(以避免不必要的修改?),并返回一个指向已强制转换的double[]数组的指针。然而,我编写的代码似乎不起作用。有人能指出它出了什么问题吗?

#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++还很陌生,无法准确指出问题所在。提前谢谢。

当您将其标记为C++时,我认为这可能更惯用:

#include <vector>
#include <algorithm>
std::vector<double> CastToDouble(std::vector<int> const & ints)
{
    auto doubles = std::vector<double>(ints.size());
    std::transform(ints.begin(), ints.end(), doubles.begin(), [](int value) -> double {
        return static_cast<double>(value);
    });
    return doubles;
}
int main(int argc, char* argv[])
{
    auto values = std::vector<int>() = { 
        1, 2, 3, 4
    };
    auto doubles = CastToDouble(values);
}