向指针 C++ 传递和分配新值
Passing and Assigning New Value to Pointer C++
我正在传递一个指向函数的指针。我想为函数内部传递的指针分配一个新地址,我希望在函数 returns 之后使用该地址。我不确定这是否可行,但我想这样做:
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;
}
这可能吗,或者 intPtr
从 foo
返回后不会维护新分配?这行得通吗(如果行不通:为什么)?
传递一个指针的指针并赋值给它
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 )
你的方法不工作的原因是你在按值传递指针。按值传递会在函数内创建一个临时对象,因此一旦函数 returns,对临时对象的任何更改都会消失。
与此无异:
void foo(int x)
{
x = 10;
}
int main()
{
int a = 0;
foo( a );
// a is still 0, not 10
}
a
是按值传递的,所以foo()
函数在函数内部将参数改为10
。但是,你会看到main
中的a
在函数returns之后并没有变成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;
}
我正在传递一个指向函数的指针。我想为函数内部传递的指针分配一个新地址,我希望在函数 returns 之后使用该地址。我不确定这是否可行,但我想这样做:
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;
}
这可能吗,或者 intPtr
从 foo
返回后不会维护新分配?这行得通吗(如果行不通:为什么)?
传递一个指针的指针并赋值给它
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 )
你的方法不工作的原因是你在按值传递指针。按值传递会在函数内创建一个临时对象,因此一旦函数 returns,对临时对象的任何更改都会消失。
与此无异:
void foo(int x)
{
x = 10;
}
int main()
{
int a = 0;
foo( a );
// a is still 0, not 10
}
a
是按值传递的,所以foo()
函数在函数内部将参数改为10
。但是,你会看到main
中的a
在函数returns之后并没有变成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;
}