向指针C++传递和分配新值
Passing and Assigning New Value to Pointer C++
我正在传递一个指向函数的指针。我想为函数内传递的指针分配一个新地址,并且希望在函数返回后使用该地址。我不确定这是否可能,但我想做:
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
返回后不会保留新的分配?这行得通吗(如果不行:为什么)?
传递对指针的引用:
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;
}
相关文章:
- C++使用另一个数组和新值初始化数组
- 如何在模板类函数中分配结构值?
- 将内存分配返回值强制转换为 TYPE 数组
- 变体 - 分配新值时是否清理旧值?
- 获取指针的地址会为其分配一个值
- 在 c++ 中分配布尔值的动态二维数组时超出内存限制
- C++:我可以在线程仍在运行时为线程提供新值,还是必须先结束它?
- 如何在while循环之外分配一个新值
- 将const char * const参数成员分配给新值
- 如何在类构造函数中创建新值并分配给私有unique_ptr
- 调用时为 std::function 分配新值
- 在为其分配一个新值之前,应将`nullptr`分配给`sTD :: simelod_ptr`
- 如果我尚未为指针分配新值,是否需要删除指针?
- OpenCV:为矩阵元素分配新值
- 为什么reverse_iterator无法使用forward Itererator分配一个新值
- 向指针C++传递和分配新值
- 通过为每个字母分配(新)值在简单加密中使用数组
- 删除现有指针数组的值,然后为指针数组分配新值
- 方便的类型推断方法,用新对象重新分配' unique_ptr '值
- 赋值运算符是否应为数据成员分配新内存或重用现有内存