C 中函数不会改变传递的指针
在 C 中,当尝试修改传递给函数的指针时会出现混乱。问题在于指针的固有性质。当函数接收指针作为参数时,它实际上是在该指针的副本上进行操作,而不是原始指针本身。
考虑示例函数 clickOnBubble:
bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble *targetBubble) { // ... your code }
当您传递一个指针作为参数,该函数在其本地范围内创建该指针的新副本。对指针本地副本所做的任何修改都不会影响函数外部的原始指针。在上面的场景中,代码尝试将 targetBubble 分配给函数内 bubbles 向量的元素,但此分配仅修改 targetBubble 的本地副本。
要有效修改函数外部的指针,可以使用指向指针的指针或对指针的引用。这允许函数访问和修改原始指针。
使用指向指针的指针:
void foo(int **ptr) { *ptr = new int[10]; // Assign memory to the pointed-to location }
在此示例中,函数 foo 接受一个指针以指针作为其参数。现在它可以修改指针本身,为其分配一个新值。
使用对指针的引用:
void bar(int *&ptr) { ptr = new int[10]; // Assign memory to the pointed-to location }
这里,函数栏接受一个对指针的引用。它可以直接访问和修改原始指针。
以上是为什么修改 C 函数中的指针不会改变原始指针?的详细内容。更多信息请关注PHP中文网其他相关文章!