【问题标题】:Difference between an int passed by reference and a passed address of an int通过引用传递的 int 和传递的 int 地址之间的区别
【发布时间】:2013-04-20 22:10:31
【问题描述】:
void VoidRef (int &ref){
   ref++;
}

void VoidPtr (int *ptr){
  (*ptr)++;
}

int test= 5;

VoidRef(test);
cout << test;  // is 6

VoidPtr(&test);
cout << test;  // is 7 !

为什么两个虚空做同样的事情? 哪个虚空需要更多资源?

【问题讨论】:

  • 是的,它们都做同样的事情(尽管我会选择第一个,因为它涉及实现一种侵入性较小的语法)。
  • 引用通常在底层实现为指针,因此在资源方面它们应该是相同的。一般的参考文献应该是首选。
  • 使用引用的主要优点 (IMO) 是不可能意外传递空指针或其他无效指针。
  • 它们被称为“函数”,而不是“空隙”。函数声明中的“void”表示函数不返回任何内容。是的,指针和引用非常相似。

标签: c++ pointers parameters reference


【解决方案1】:
void VoidRef (int &ref){
              //^^pass by reference
   ref++;
}

void VoidPtr (int *ptr){
                //^^ptr stores address of test
  (*ptr)++;
}

Why do both voids do the same thing?

ref是对test的引用,即test的别名,所以对ref的操作也是对test的操作。

ptr 是存储test 的内存地址的指针,因此(*ptr)++ 会将存储在内存地址上的值加一。第一个输出是 6 而第二个输出是 7 的原因是每次调用这两个函数都会使变量值增加 1。

think of可以同时VoidRefVoidPtr对变量test的地址进行操作,所以它们的效果是一样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 2012-04-14
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多