首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针引用类型

指针引用类型
EN

Stack Overflow用户
提问于 2010-04-27 08:54:28
回答 2查看 380关注 0票数 0

我正在尝试编写一个接受指针参数的函数,修改指针指向的内容,然后将指针的目的地作为引用返回。我收到以下错误:cannot convert int*** to int* in return

代码:

代码语言:javascript
复制
#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;
}

感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-27 09:12:42

如果你的意思确实是“将指针的目的地作为引用返回”,那么我认为你想要的返回类型是int&而不是int*

这可能是C++的一个令人困惑的地方,因为&*根据您在哪里使用它们有不同的含义。如果您在谈论变量定义或返回类型,则&是“引用类型”;但如果它位于定义后使用的变量前面,则表示“的地址”。

我可能完全错了,但在我看来你把这两种含义搞混了;既然你想返回一个引用,你就写了"return &i",因为&是用来引用的。但是,在本例中,它返回i的地址。由于i是指向int指针的指针,因此在下面的代码行中:

代码语言:javascript
复制
int* increment(int** i) { i++; return &i;}

返回指向指向int的指针的指针的地址。这就是您收到错误消息cannot convert int***' to int*的原因。

让我们逐行遍历您的代码。你的目标是一个接受指针并返回一个引用的程序。所以这将是:

代码语言:javascript
复制
int& increment(int* i)

我们不需要代码中的双指针(除非你想要一个指向指针的指针)。然后,您希望它修改指针所指向的内容:

代码语言:javascript
复制
(*i)++;

然后将指针的目标作为引用返回:

代码语言:javascript
复制
return *i;

在这里,我们取消对i的引用。记住,使用引用可以让你像对待普通变量一样对待它们,并为你处理指针的东西。所以C++会认为你想把它作为一个引用。

然后,为了使用你的代码,你可以做你已经做过的事情,但是使用更少的指针:

代码语言:javascript
复制
int a=24;
int *p=&a;
int *p2;
p2 = increment(p);

我没有测试过这些,所以任何人都可以随意编辑我的答案,如果我弄错了,可以修复它。

票数 2
EN

Stack Overflow用户

发布于 2010-04-27 08:57:44

代码语言:javascript
复制
int* increment(int** i) { (**i)++; return *i;}

代码语言:javascript
复制
cout << *p2;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2718050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档