传递和赋值指针C ++的新值

时间:2015-02-13 22:51:11

标签: 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 * fooPtr, int & newInt )
{
    int * newIntPtr = &newInt;
    fooPtr = newIntPtr;
}

这是可能的,还是intPtrfoo返回后不会维持新的作业?这可行吗(如果它没有:为什么)?

3 个答案:

答案 0 :(得分:4)

传递对指针的引用:

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

您的方法工作的原因是您正在传递指针 by-value 。传递by-value会在函数内创建一个临时函数,因此只要函数返回,对临时值的任何更改都会消失。

与此无异:

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

int main()
{
   int a = 0;
   foo( a );
   // a is still 0, not 10
}

a按值传递,因此foo()函数会将参数更改为函数中的10。但是,在函数返回后,您会看到a中的main未更改为10。

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

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

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

答案 1 :(得分:2)

传递指针的指针并分配给它

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;
}

答案 2 :(得分:0)

如果你用纯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; 
}