读书人

关于引述参数函数调用的一点疑惑

发布时间: 2012-06-29 15:48:47 作者: rapoo

关于引用参数函数调用的一点疑惑。
先来两个例子

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;} 

读书人网 >C++

热点推荐