通过指针传递vs通过引用传递

时间:2015-01-05 11:07:00

标签: c++ pointers

我已经理解了通过引用调用函数可以通过两种方式完成这一事实:通过引用传递变量或通过指针传递变量。 但现在我被困在它的o / p差异

#include <iostream>

using namespace std;
void test(int *a)
{

    cout<<&a<<"  ";
}
int main()
{
   int a[4]={5,3,8,2};
   for(int i=0;i<4;++i)
   {
        test(&a[i]);    
   }
    return 0;
}

这给了我相同的地址位置但不应该因为我们通过&amp; a [i] - &gt;而不同。每次调用时,指针a接收到的第i个元素的地址,但每次都得到相同的地址,这是数组的起始地址 如果我稍微修改函数调用,我得到预期的o / p 这来自以下代码

#include <iostream>

using namespace std;
void test(int &a)
{

    cout<<&a<<"  ";
}
int main()
{
   int a[4]={5,3,8,2};
   for(int i=0;i<4;++i)
   {
        test(a[i]);    
   }
    return 0;
}

1 个答案:

答案 0 :(得分:4)

在第一个示例中,您将打印指针本身的地址。这是函数的局部变量。如果你打印出它指向的东西的地址,你会看到不同的地址:

cout<< &(*a) << "  ";
cout << a << "  ";    // same as above

在第二个示例中,引用引用传递给函数的参数。获取引用的地址与获取引用的对象的地址相同,因为引用只是对象的别名。