指针引用类型

时间:2010-04-27 00:54:28

标签: c++ reference types

我正在尝试编写一个带有指针参数的函数,修改指针指向的函数,然后返回指针的目标作为引用。 我收到以下错误: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;
}

感谢您的帮助!

2 个答案:

答案 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;