gpt4 book ai didi

c++ - 如何使用指针 C++ 将二维数组中的元素复制到一维数组中

转载 作者:行者123 更新时间:2023-11-30 03:21:09 26 4
gpt4 key购买 nike

我有一个函数

double* get_row(double *the_array, int row_num, int col_size)    

其中 the_array 是一个二维数组,row_num 是我要从中复制值的二维数组的行号,col_size 是二维数组的列大小。

功能实现

double* get_row(double *the_array, int row_num, int col_size) {

double* row = new double[col_size];

for (int i = 0; i < col_size; i++) {

*row = *(*(the_array + row_num) + i);
row++;
}

delete[] row;

return row;
}

我试图将二维数组 the_array 的行 row_num 中的值复制到一维数组 row 但编译器给我一个错误线*row = *(*(the_array + row_num) + i); 我用来将元素从一个数组复制到另一个数组,完成此类任务的正确方法是什么。

顺便说一句,我从 visual studio 得到的错误是:'*' 的操作数必须是一个指针。

谢谢你的帮助。

最佳答案

为了解决这个问题,我假设“col_size”实际上是“列数”。并且数据按行优先顺序排列。

然后第 N 行的开始位于 the_array + row_num*col_size

我将从这个辅助函数开始:

inline double* view_row_n( double* array, int row, int num_cols ) {
return array+row*num_cols;
}

然后我会写一个复制缓冲区:

 std::unique_ptr<double[]> copy_buffer( double const* in, int count ) {
double* retval = new double[count];
std::memcpy( retval, in, sizeof(double)*count );
return std::unique_ptr<double[]>( retval );
}

现在我会一起使用它们:

double* get_row( double* the_array, int row_num, int col_size) {
auto retval = copy_buffer( view_row_n( the_array, row_num, col_size), col_size );
return retval.release();
}

并完成它。

我也会改变:

double* get_row( double const* the_array, int row_num, int col_size) {

甚至:

std::unique_ptr<double[]> get_row( double const* the_array, int row_num, int col_size) {

但这超出了您的问题范围。

关于c++ - 如何使用指针 C++ 将二维数组中的元素复制到一维数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52282042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com