c++ 在函数中使用两个int* 数组和for循环时出现错误E0142和E0020

iyfjxgzm  于 2022-11-19  发布在  其他
关注(0)|答案(2)|浏览(218)

我尝试使用指针将两个数组发送到一个函数。
接下来,我尝试将两个 * 数组(作为函数调用中的参数发送)中解除引用的值赋给两个(非指针)数组,在那里可以更容易地操作它们。
注意:没有对象或类。我没有看到任何动态内存处理(新建、删除)的结果。
main中的原始数组:

int arr_fractions[2][7]
    {
        0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0
    };

int arr_converted_values[2][7]
    {
        0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0
    };

这是函数调用,主要是:

arr_converted_values[2][7] = decimal_conversion(arr_decimals, *arr_converted_values, &var_fract_length);

功能:

int decimal_conversion(long double* arr_temp_decimals, int* arr_converted_values, int* var_fract_length)
{
    // pointer retrieval ----------------------------------------------------------------
    long double arr_temp_decimals[2][7]
    {
        0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0
    };

    int arr_temp_values[2][7]
    {
        0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0
    };

    int var_tempt_fract_value = *var_fract_length;

    for (int* var_temp_storage = 0; *var_temp_storage < *var_fract_length; *var_temp_storage++)
    {
        arr_temp_decimals[0][*var_temp_storage] = &arr_decimals[0][*var_temp_storage];
        arr_temp_decimals[1][*var_temp_storage] = &arr_decimals[1][*var_temp_storage];
        arr_temp_values[0][*var_temp_storage] = arr_converted_values[0][var_temp_storage];
        arr_temp_values[1][*var_temp_storage] = arr_converted_values[1][var_temp_storage];
    }
    // --------------------------------------------------------------------------------------------

    ...
    ...
    ...

    return (*arr_converted_values);
}

我收到的三个错误(如下所示)指向for循环中的数组用法,如上所示。
E0142:表达式必须具有指向对象的指针类型,但其类型为--〉arr_*temp_*decinmals[0[*var_temp_storage]
E0142:表达式必须具有指向对象的指针类型,但它的类型为--〉arr_*temp_*decinmals[1]*var_temp_storage]
E0020:未定义标识符“arr_decinmals”---〉&arr_decinmals[0][*var_temp_storage];

ggazkfy8

ggazkfy81#

问题是你试图给数组赋值,这是不可能的。数组在C++中是不可赋值的
您可能要将值指派给数组的元素,例如:

arr_temp_decimals[0][*var_temp_storage] = arr_decimals[0][*var_temp_storage];

但是,这也不起作用,因为您试图将long double类型的值赋给int类型的元素。您需要首先转换该值,例如:

arr_temp_decimals[0][*var_temp_storage] = static_cast<int>(arr_decimals[0][*var_temp_storage]);

或者,您可以将arr_temp_decimals数组的类型变更为long double类型,例如:

long double arr_temp_decimals[2][7]
{
    0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0
};
91zkwejq

91zkwejq2#

代码段中有许多错误。
arr_temp_decimals具有重定义
未定义标识符“arr_decimals”
之前没有在函数中声明arr_decimals。
将arr_decimals放入decimal_conversion(arr_decimals ...)中。因此它将是

arr_decimals[0][*var_temp_storage] = arr_decimals[0][*var_temp_storage];

arr_converted_values是静态二维数组。请考虑将函数参数int* arr_converted_values更改为int arr_converted_values[][7]

for (int* var_temp_storage = 0; *var_temp_storage < *var_fract_length; *var_temp_storage++)
arr_converted_values[0][var_temp_storage];

指针地址不能像arr_converted_values[0][var_temp_storage]一样使用。
请考虑使用std::vector

相关问题