首页 >后端开发 >C++ >C 中指针和引用参数的功能相同吗?

C 中指针和引用参数的功能相同吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-03 02:13:29733浏览

Are Pointer and Reference Parameters Functionally Identical in C  ?

指针与引用参数:详细检查

问题:

做指针参数(例如,int foo(bar* p) { ... })和引用参数(例如,int foo(bar& r) { ... })在 C 中的行为相同?

答案:

指针和引用之间的区别超出了它们的实现标准中的详细信息。引用体现了语法糖概念,本质上是为变量创建别名。这允许编译器优化指针会增加复杂性的代码。

功能等价:

假设没有空指针问题,函数 foo(bar* p) 和 foo如果 someInt() 方法不是虚拟的, (bar& r) 本质上是等价的。这两个函数都通过参数直接访问对象的成员函数。但是,如果 someInt() 是虚拟的,则基于引用的参数函数 (foo(bar& r)) 将根据实际对象的类型调用正确的方法,而基于指针的函数 (foo(bar* p)) 将始终调用基类方法。

分配给引用:

分配栏& ref = *ptr_to_bar 不会导致任何切片。引用 ref 将为 ptr_to_bar 指向的对象起别名,允许您直接访问其成员。

其他差异:

  • 引用不能分配为 NULL。
  • 指针的地址产生指针变量的地址,而引用的地址产生引用变量的地址。
  • 引用一旦初始化就无法重新分配。

以上是C 中指针和引用参数的功能相同吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn