关于引用参数函数调用的一点疑惑。
先来两个例子
- C/C++ code
void swap (int &a, int &b){ int t = a; a = b; b = t;}//此函数调用a = 5;b = 10;swap(&a,&b); //这里必须取地址做参数,swap里面的参数可以看做引用,也可以看做地址做参数。cout << a ,b <<endl;
- C/C++ code
String::String(const String &other) { int length = strlen(other.m_data); m_data = new char[length+1]; strcpy(m_data, other.m_data); } string a;a = "abcd";string b(a)// string类的拷贝构造函数,参数依旧是引用// 调用的时候参数还是直接写的实例,难道说参数只是 指向a首地址的指针?
我就是搞不清,引用做参数的时候 什么时候取地址调用,什么时候直接调用?或者对于类型实例,两者都是一样的?
[解决办法]
对于引用,可以理解为在函数内部操作形参时,相当于等价操作对应的实参
[解决办法]
swap(&a,&b); //这里必须取地址做参数,swap里面的参数可以看做引用,也可以看做地址做参数。
这个不对吧,&a是指针啊,与int &不匹配
[解决办法]
你的第一个例子错了,对于引用参数,直接swap(x, y)
我写个简单例子,可以了解引用和指针2种参数的不同调用方式以及函数内不同实现方式
- C/C++ code
#include <iostream>using namespace std;void swap(int & a, int & b){ cout << "使用引用参数\n"; int temp; temp = a; a = b; b = temp;}void swap(int* a, int* b){ cout << "使用指针参数\n"; int temp; temp = *a; *a = *b; *b = temp;}int main(){ int x = 5; int y = 10; swap(x, y); //引用参数 cout << x << " " << y << endl; swap(&x, &y); //指针参数 cout << x << " " << y << endl; return 0;}