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

Passing by Pointers vs Passing by reference

我了解到通过引用调用函数可以通过两种方式完成,即通过引用传递变量或通过指针传递变量。 但现在我陷入了 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;
}

这给了我相同的地址位置,但它不应该有所不同,因为我们正在传递 &a[i]--> 每次调用第 i 个元素的地址,它由指针 a 接收,但我得到每次都是相同的地址,即数组的起始地址 而如果我稍微修改函数调用,我会得到预期的 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;
}

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

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

在你的第二个例子中,引用是指传递给函数的参数。获取引用的地址与获取其引用的对象的地址是一样的,因为引用只是对象的别名。