我已经理解了通过引用调用函数可以通过两种方式完成这一事实:通过引用传递变量或通过指针传递变量。 但现在我被困在它的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;
}
答案 0 :(得分:4)
在第一个示例中,您将打印指针本身的地址。这是函数的局部变量。如果你打印出它指向的东西的地址,你会看到不同的地址:
cout<< &(*a) << " ";
cout << a << " "; // same as above
在第二个示例中,引用引用传递给函数的参数。获取引用的地址与获取引用的对象的地址相同,因为引用只是对象的别名。