我已经阅读了许多关于通过引用将指针传递给函数的主题,但我无法找到答案。问题是我通过引用传递指针并更改其值后,在离开函数后,原始指针的值不会改变。我真的很困惑。请帮我!你是我唯一的希望!
顺便说一下。我粘贴的代码与我需要处理的代码相同,我无法真正改变函数的调用。 代码:
void f(char *p){
char *np = new char(100);
np = "aaaaaaaaaaaaaaaaa";
p = np;
}
调用此功能:
void *ptr;
f((char *)&ptr);
我将非常感谢任何帮助!
答案 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 *转换内容可能有助于出现别名问题(否则编译器可能会优化整个操作)。所以也许你的问题是合法的一部分。但它很丑陋必须有更好的方法。