在函数中改变指针(重新赋值)的原因是因为函数参数传递的方式是按值传递。当我们将指针作为参数传递给函数时,实际上是将指针的副本传递给了函数,而不是指针本身。因此,当我们在函数中重新赋值指针时,只是修改了指针副本的值,并不会影响到原始指针。
这种按值传递的方式可以理解为将指针的值复制给了函数内部的一个新的指针变量,这个新的指针变量与原始指针指向的是同一个内存地址。当我们在函数中重新赋值这个新的指针变量时,只是修改了这个新的指针变量的值,并不会改变原始指针的值。
如果我们想在函数中改变指针的值,可以通过传递指针的指针或者指针的引用来实现。这样,在函数中修改指针的值时,实际上是修改了原始指针的值。
以下是一个示例代码:
#include <iostream>
void changePointer(int** ptr) {
int* newPtr = new int(10);
*ptr = newPtr;
}
int main() {
int* ptr = nullptr;
changePointer(&ptr);
std::cout << *ptr << std::endl; // 输出 10
delete ptr;
return 0;
}
在上述代码中,我们定义了一个函数changePointer
,它接受一个指向指针的指针作为参数。在函数内部,我们创建了一个新的指针newPtr
并将其赋值为10,然后通过修改指针的指针ptr
的值,将其指向newPtr
。在main
函数中,我们调用changePointer
函数,并输出ptr
指向的值,可以看到输出结果为10。
需要注意的是,在使用完动态分配的内存后,我们需要手动释放内存,以避免内存泄漏。在上述示例代码中,我们使用delete
关键字释放了ptr
指向的内存。
腾讯云相关产品和产品介绍链接地址:
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云