我正在尝试编写一个带有指针参数的函数,修改指针指向的函数,然后返回指针的目标作为引用。
我收到以下错误:cannot convert int*** to int* in return
代码:
#include <iostream>
using namespace std;
int* increment(int** i) {
i++;
return &i;
}
int main() {
int a=24;
int *p=&a;
int *p2;
p2=increment(&p);
cout<<p2;
}
感谢您的帮助!
答案 0 :(得分:2)
如果你的意思是“将指针的目的地作为参考返回”,那么我认为你所追求的返回类型是int&
而不是int*
。
这可能是关于C ++的一个令人困惑的事情,因为&
和*
具有不同的含义,具体取决于您使用它们的位置。如果您正在谈论变量定义或返回类型,&
是“引用类型”;但它的意思是“地址”,如果它在定义后使用的变量前面。
我可能完全错了,但在我看来,你已经把这两个含义混淆了;并且由于您想要返回引用,因此您编写了“return &i
”,因为&
用于引用。但是,在这种情况下,它会返回i
的地址。因为i
是指向int的指针,所以在这行代码中:
int* increment(int** i) { i++; return &i;}
您将返回指向int
指针的指针的地址。这就是您收到错误消息cannot convert int***' to int*
。
让我们逐行浏览您的代码。您正在使用指针并返回引用的程序。那就是:
int& increment(int* i)
我们不需要你的代码中的双指针(除非你想要指针指针)。然后,您希望它修改指针指向的内容:
(*i)++;
然后返回指针的目标作为参考:
return *i;
在这里,我们解除引用i
。请记住,使用引用可以将它们视为普通变量,并为您处理指针内容。所以C ++会发现你希望它成为一个参考。
然后,要使用你的代码,你几乎可以做你所拥有的,但使用更少的指针:
int a=24;
int *p=&a;
int *p2;
p2 = increment(p);
我没有测试任何这个,所以如果我出错了,任何人都可以随意编辑我的答案并修复它。
答案 1 :(得分:1)
int* increment(int** i) { (**i)++; return *i;}
和
cout << *p2;