C++ 将新值传递给指针C++;

C++ 将新值传递给指针C++;,c++,pointers,reference,function-calls,C++,Pointers,Reference,Function Calls,我正在传递一个指向函数的指针。我想为函数内传递的指针分配一个新地址,并且希望在函数返回后使用该地址。我不确定这是否可行,但我想: int main() { int i = 100, j = 200; int * intPtr = &i; foo(intPtr, j); // I want intPtr to point to j, which contains 200 after returning from foo. } void foo( int

我正在传递一个指向函数的指针。我想为函数内传递的指针分配一个新地址,并且希望在函数返回后使用该地址。我不确定这是否可行,但我想:

int main()
{
    int i = 100, j = 200;
    int * intPtr = &i;
    foo(intPtr, j);
    //  I want intPtr to point to j, which contains 200 after returning from foo.
}

void foo( int * fooPtr, int & newInt )
{
    int * newIntPtr = &newInt;
    fooPtr = newIntPtr;
}

这是可能的,还是从
foo
返回后,
intPtr
不会维护新分配?这行得通吗(如果不行:为什么)

传递指针的指针并将其赋值

int main()
{
    int i = 100, j = 200;
    int * intPtr = &i;
    foo( &intPtr, j );
    //  I want intPtr to point to j, which contains 200 after returning from foo.
}

void foo( int ** fooPtr, int & newInt )
{
    int * newIntPtr = newInt;
    *fooPtr = newIntPtr;
}

将引用传递给指针:

void foo(int*&fooPtr,int&newInt)

方法不起作用的原因是您正在按值传递指针。通过值传递在函数中创建一个临时值,因此一旦函数返回,对临时值的任何更改都会消失

与此无异:

void foo(int x)
{
   x = 10;
}

int main()
{
   int a = 0;
   foo( a );
   // a is still 0, not 10
}
a
通过值传递,因此
foo()
函数将函数中的参数更改为
10
。但是,在函数返回后,
main
中的
a
不会变为10

要更改
a
,您需要通过引用传递
int

void foo(int& x)
{
   x = 10;
}

int main()
{
   int a = 0;
   foo( a );
   // a is now 10
}

如果你用纯C语言编程,你可以这样做

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void foo(int **, int *);


 int main()
{
  int i = 100, j = 200;
  int * intPtr = &i;
  int  *intPtr2=&j;
  foo( &intPtr, intPtr2 );
  //  I want intPtr to point to j, which contains 200 after returning   from foo.
  printf("%d",*intPtr);
}
 void foo( int ** fooPtr, int * newInt )
{
  int * newIntPtr = newInt;

  *fooPtr = newIntPtr; 
}
#包括
#包括
#包括
void foo(int**,int*);
int main()
{
int i=100,j=200;
int*intPtr=&i;
int*intPtr2=&j;
foo(&intPtr,intPtr2);
//我希望intPtr指向j,从foo返回后包含200。
printf(“%d”,*intPtr);
}
无效foo(int**fooPtr,int*newInt)
{
int*newIntPtr=newInt;
*fooPtr=newIntPtr;
}

int*newIntPtr=newInt有不兼容的字体看起来您有输入错误:int*newIntPtr=&newInt;谢谢这正是我需要知道的。我想这会将值200赋给intPtr指向的地址,但intPtr不会指向j。我需要intPtr指向的地址在main中更改。我编辑了代码,现在您可以更改该指针指向j。我使用指针对指针,并在main中发送指针的地址。以上是完全相同的答案,所以我希望这有帮助。是的,你是对的。变量名非常混乱。