【问题标题】:Invalid conversion from 'int' to 'int*'(Trying to do recursion with pointers)从 'int' 到 'int*' 的无效转换(尝试使用指针进行递归)
【发布时间】:2017-05-07 04:33:51
【问题描述】:

这是代码。它在数组输入中占用 3 个 int。然后将其传递给函数 binary。它将十进制数转换为二进制。

#include <iostream>

using namespace::std;

void binary(int *);

int main() {
    int input[3];

    cout << "Enter 3 numbers : ";

    for(int i = 0; i < 3; i++ ){
        cin >> input[i];
    }

    binary(input);


    return 0;
}

void binary(int *num){
    int rem = 0;
    for(int i = 0 ;i < 3; i++){

        if (num[i] < 1){
            cout << rem;
            return;
        }

        rem = num[i] % 2;
        binary(*num / 2);

        cout << rem;
    }
}

问题出在最后一行4号

 binary(*num / 2);

这里显示错误 => 从 'int' 到 'int*' 的无效转换 [-fpermissive]

帮帮我!

【问题讨论】:

  • 错误信息的哪一部分你不明白?表达式*num / 2 是一个整数。该函数需要 int * 作为参数,而不是 int
  • 如果您将 int 传递给接收指针的函数(在您的情况下,这可能是一个包含 3 个整数的数组),您希望您的函数如何工作?
  • 不要将循环和递归结合起来。
  • binary(*num / 2); 三思而后行。你到底打算在那里做什么?
  • binary(*num / 2); binary 需要一个指向 int 的指针,然后您将整数值而不是指针传递给它

标签: c++ arrays function pointers recursion


【解决方案1】:

函数 binary() 将指向 int 的指针作为参数,并在函数体中递归调用它并传递 int 值(指针指向的地址中的值)。

更正您的代码:

num[i] /= 2;
binary(num);

【讨论】:

    【解决方案2】:

    我不确定我是否完全理解你在这段代码中所做的事情,但我可以告诉你发生了什么。

    1. *num / 2 作为(*num) / 2 工作。 num 是一个指针(它的类型为 int*),它指向数组的开头(指向第一个元素)。 *num 提取第一个元素的值(它的类型为int)。
    2. (*num) / 2 将第一个元素的值相除。它返回一个整数值。
    3. binary(*num / 2) - 在这里,您将整数值作为函数binary 的参数传递,该函数采用int* 而不是int。这导致了错误。

    如果你想划分数组的所有元素,你应该对每个元素分别进行。例如:

    num[0] /= 2;
    num[1] /= 2;
    num[2] /= 2;
    
    binary(num);
    

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 2020-01-15
      • 2012-05-13
      • 1970-01-01
      相关资源
      最近更新 更多