向指针C++传递和分配新值

Passing and Assigning New Value to Pointer C++

本文关键字:分配 新值 指针 C++      更新时间:2023-10-16

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

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返回后不会保留新的分配?这行得通吗(如果不行:为什么)?

传递对指针的引用:

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
}

传递指针的指针并为其分配

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

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