【问题标题】:Passing new value to a pointer via a recursive function in c++通过C++中的递归函数将新值传递给指针
【发布时间】:2022-01-02 11:33:41
【问题描述】:

如何将p 的值更改为1,将其作为参数传递给递归函数。 这是我的代码:

class Solution
{
   void g(int n,int k,int *p){
       if(k==0) return;
       if(k%n==0) g(n,k-1,1);
       cout<<p<< endl;
       g(n,k-1,p+1);
   }
   public:
       int josephus(int n, int k)
           { int p=1;
           g(n,k,&p);
           return p;
       }
};

我得到这个错误:

prog.cpp: In member function void Solution::g(int, int, int*):
prog.cpp:14:21: error: invalid conversion from int to int* [-fpermissive]
 if(k%n==0) g(n,k-1,1);
                     ^
prog.cpp:12:9: note:   initializing argument 3 of void Solution::g(int, int, int*)
    void g(int n,int k,int *p){

【问题讨论】:

  • 为什么要用指针?
  • 尝试参考。并编写一些测试。
  • @outis 从表面上看,您发现的问题在标题中提出了类似的问题。但是,帖子中的问题本身似乎与此问题无关。
  • @jxh:相反,两个问题都传递了int,而不是使用指针来存储整数表达式的结果,然后传递指针。这两个问题都使用指针传递引用,并且都与递归函数有关。不同的是确切的表达方式,但这不足以使问题不重复。

标签: c++ pointers


【解决方案1】:

错误表明当函数需要 int * 时,您不能将 int 作为参数传递给函数。

您的代码中还有一个逻辑错误:

       g(n,k-1,p+1);

这个递归调用会增加指针值,使其指向传入的对象,因为函数是这样调用的:

           { int p=1;
           g(n,k,&p);

由于您的函数采用int *,因此您需要取消引用指针以操作引用的对象。因此,您可能打算增加 *p,然后进行递归调用:

       ++*p;
       g(n,k-1,p);

为了解决编译错误,您可能打算将1 分配给int 对象并进行递归调用。

       if(k%n==0) {
           *p = 1;
           g(n,k-1,p);
       }

【讨论】:

  • 不会++*pint 而不是int*
猜你喜欢
  • 2012-02-22
  • 2010-10-02
  • 2019-09-16
  • 2017-04-26
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
相关资源
最近更新 更多