【问题标题】:Setting an array as a modifiiable parameter of a function in C++在 C++ 中将数组设置为函数的可修改参数
【发布时间】:2020-11-20 19:29:12
【问题描述】:

我正在尝试将数组设置为自制函数的输入参数,我想在其中修改数组的值。为此,我尝试将函数定义中的输入数组设置为指针,但给我带来了一些麻烦。

*.hpp 文件的部分可以在这里看到:

void CrossWall(int, int, bool[]);

*.cpp文件的部分是下一个:

void NODE::CrossWall(int robot_x, int robot_y, bool done_checking[]){

    if (((robot_x+1) > (current_map.CheckLength() - 1)) && !done_checking[3] ){
        available_movements[3] = 0;
        done_checking[3] = true;
    }
    if (((robot_x-1) < 0 ) && !done_checking[2]){
        available_movements[2] = 0;
        done_checking[2] = true;
    }
    if (((robot_y+1) > (current_map.CheckHeight() - 1)) && !done_checking[0]){
        available_movements[0] = 0;
        done_checking[0] = true;
    }
    if (((robot_y-1) < 0 ) && !done_checking[1]){
        available_movements[1] = 0;
        done_checking[1] = true;
    }
}

我要修改的数组是布尔数组(那里唯一的一个)。

【问题讨论】:

  • 什么麻烦? available_movements 是在某处定义的吗?
  • 代码看起来不错,你遇到了什么麻烦?
  • 您可能需要考虑 std::array 或 std::vector
  • 我认为您需要添加更多代码上下文。您需要minimal reproducible example,因为您的问题没有显示在提供的代码中,或者至少对我来说一点也不明显。
  • 指针是按值传递的,而不是值的数组。引用该问题的公认答案:如果您按值传递数组,那么您真正要做的是复制指针-指向数组第一个元素的指针被复制到参数(其type 也应该是数组元素类型的指针)。这是由于阵列的衰减性质而起作用的;一旦衰减,sizeof 不再给出完整数组的大小,因为它本质上变成了一个指针。

标签: c++ arrays function pointers


【解决方案1】:

我想我发现了一个困惑点:

不会这样做,因为它不是指针。

其实它一个指针:What is array to pointer decay?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多