标签:
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 string version(string &a, const string &b); 7 8 int main(void) 9 { 10 string input = "I love you."; 11 cout << "input address: " << &input << endl; 12 const char* b = "***"; 13 cout << "i b address: " << &b << endl; 14 15 version(input, b); 16 17 return 0; 18 } 19 20 string version(string &a, const string &b) 21 { 22 using namespace std; 23 cout << "a address: " << &a << endl; 24 cout << "b address: " << &b << endl; 25 return a;//没有这句会产生内存错误。返回引用。 26 } 27 /************************************ 28 * input address: 0x7ffe09a647f0 29 * i b address: 0x7ffe09a647e8 30 * a address: 0x7ffe09a647f0 31 * b address: 0x7ffe09a64840 32 * **********************************/
其中,input是string对象,应用了string类定义了一种char*到string的转换功能,将字符串字面量转为string对象。b则是char*型,作为实参时函数会创建一个临时变量。看代码得知,b在main中的地址是:i b address: 0x7ffe09a647e8 ,而在version中的地址是:b address: 0x7ffe09a64840 。它们不一样,说明了函数却实是没有传递char *b的引用,而是临时变量。又看string类input,在main中和在version中的地址是一样的。说明是传递了input的引用。
标签:
原文地址:http://www.cnblogs.com/busui/p/5744714.html