通过指针传递与通过引用传递
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
在你的第二个例子中,引用是指传递给函数的参数。获取引用的地址与获取其引用的对象的地址是一样的,因为引用只是对象的别名。
我了解到通过引用调用函数可以通过两种方式完成,即通过引用传递变量或通过指针传递变量。 但现在我陷入了 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
在你的第二个例子中,引用是指传递给函数的参数。获取引用的地址与获取其引用的对象的地址是一样的,因为引用只是对象的别名。