我正在尝试编写一个接受指针参数的函数,修改指针指向的内容,然后将指针的目的地作为引用返回。我收到以下错误: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;
}感谢您的帮助!
发布于 2010-04-27 09:12:42
如果你的意思确实是“将指针的目的地作为引用返回”,那么我认为你想要的返回类型是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);我没有测试过这些,所以任何人都可以随意编辑我的答案,如果我弄错了,可以修复它。
发布于 2010-04-27 08:57:44
int* increment(int** i) { (**i)++; return *i;}和
cout << *p2;https://stackoverflow.com/questions/2718050
复制相似问题