c++ - 值调用和指针引用调用

标签 c++ c++11 pointers

这个问题在这里已经有了答案:





Reference to a pointer

(3 个回答)


2年前关闭。




这两个函数声明有什么区别?我意识到按值调用和按指针调用之间存在差异。

void foo(int* p); // Call by value to pointer
void func(int*& p); // Call by reference to pointer

r-value 到 l-value 绑定(bind)或类似的东西之间也有什么区别。

最佳答案

What are the differences between these two function declarations?



理论上,所有关于按值传递和按引用传递的规则仍然适用,即:
  • 传值:调用者中的原始值不变
  • Pass-by-reference:调用者中的原始值可能会改变

  • 这些东西在指针的上下文中仍然适用。唯一需要记住的是“原始值”是指针本身 - 而不是它指向的对象。
    void foo(int* p); // Call by value to pointer
    

    p 的更改本身不影响原p从来电者那里。

    所以如果你这样做 ++p里面 foo它会在函数内推进指针,同时保持原始指针不变。
    void func(int*& p); // Call by reference to pointer
    

    p 的更改里面 func会影响来自调用者的原始指针。

    所以如果你这样做 *(++p) = 5;里面 func它会推进指针。并假设它仍然指向调用者中有效的东西,这将使 p 指向的值在调用者中也等于 5。

    关于c++ - 值调用和指针引用调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59014722/

    相关文章:

    c++ - boost::asio::ssl::stream<boost::asio::ip::tcp::socket>::shutdown() 是做什么的?

    c++ - 定时内存方 block 游戏。现在无需计时即可工作

    c++ - 如果不存在,则调用自由函数而不是方法

    javascript - "Closure"如何影响 jQuery 中 dom 节点的嵌套遍历?

    c++ - 多态指针

    C++从函数返回指向数组的指针的正确方法

    c++ - 前向声明

    qt - std::unique_ptr 和 QObject::deleteLater

    c++ - 如何避免通用函数模板中的额外拷贝?

    c++ - 如何删除 "completely"链表中的所有节点?