【发布时间】:2015-04-21 02:27:47
【问题描述】:
我对 C++ 相当陌生,因此试图准确地理解指针和引用是如何工作的。因此,我有一个简单的程序,它应该引用一个字符串并返回对另一个字符串的引用。 我也不想抄。 这是代码
#include <iostream>
#include <cstdlib>
#include <string>
std::string& string_reverse(std::string& str){
std::string rev = "";
for(int i= str.length() -1; i >=0; i--){
rev+=str[i];
}
return &rev;
}
int main(){
std::string s="";
std::cout<<"Please enter a string..."<<std::endl;
std::cin>>s;
std::cout<< string_reverse(s)<<std::endl;
}
但是我的代码引发了很多错误。如果有人能详细说明可以做到这一点的不同方法以及每种方法的根本原因以及哪种方法是正确的,那将非常有帮助。
【问题讨论】:
-
"返回对另一个字符串的引用" - 它是函数本地的,在你可以对它做任何事情之前就被破坏了。要么按值返回,要么将传递的字符串反转并返回任何内容或对其的引用。
-
该函数被声明为返回一个引用,但您尝试返回一个指针,地址运算符
&会产生一个指针。但是在你解决了这个简单的问题之后,还有比这更糟糕的问题,即你返回一个对局部变量的引用,这个变量一旦函数退出就会超出范围,你留下一个悬空引用,使用它会导致undefined behavior. -
一般来说,当你问这样的问题时,你应该在你的问题中包含错误。您不仅可以让读者更轻松,还可以让他们有机会教您如何阅读错误,以便您自己解决问题!
标签: c++ pointers pass-by-reference