我将指针传递给函数。我想为函数内部传递的指针分配一个新地址,并且我希望在函数返回后使用该地址。我不确定这是否可行,但我想这样做:
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
返回后不会维持新的作业?这可行吗(如果它没有:为什么)?
答案 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;
}