通过引用传递指针 - 不能更改值

时间:2015-07-22 17:44:00

标签: c++ pointers reference

我已经阅读了许多关于通过引用将指针传递给函数的主题,但我无法找到答案。问题是我通过引用传递指针并更改其值后,在离开函数后,原始指针的值不会改变。我真的很困惑。请帮我!你是我唯一的希望!

顺便说一下。我粘贴的代码与我需要处理的代码相同,我无法真正改变函数的调用。 代码:

void f(char *p){
    char *np = new char(100);
    np = "aaaaaaaaaaaaaaaaa";
    p = np;
}

调用此功能:

void *ptr;
f((char *)&ptr);

我将非常感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

  

问题是我通过引用传递指针并更改其值后,在离开函数后,原始指针的值不会改变。

您没有通过引用传递。这需要有一个像

这样的函数签名
void f(char *&p){
          // ^

您的代码只会更改p的值参数副本:

p = np;    

答案 1 :(得分:2)

您的函数声明需要通过引用传递指针,如下所示:

exclude group: '*'

答案 2 :(得分:1)

你的问题不清楚,所以我需要猜测一下这个问题。我对这个问题的猜测是你无法改变签名或调用函数

void f(char* p);
...
void *ptr;
f((char *)&ptr);

你想要改变f的体,所以它会改变ptr指向f体内的文字。如果我猜对了,那么答案就是:

void f(char* p)
{
   *((char**)(p)) = "aaaaaaaaaaaaaaaaa";
}

如果我没有正确猜出问题,请更清楚地询问。

在调用中,你将一个void **转换为char *,删除了一个间接级别,然后在你将该间接级别转换回来的函数内部,同时将最终目标从void更改为char 。它并不像看起来那么奇怪(或者我会在你的问题上猜到不同)。向/从char *转换内容可能有助于出现别名问题(否则编译器可能会优化整个操作)。所以也许你的问题是合法的一部分。但它很丑陋必须有更好的方法。