gpt4 book ai didi

c++ - C++ 中的指针和引用

转载 作者:行者123 更新时间:2023-11-30 03:56:18 25 4
gpt4 key购买 nike

我是 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;

}

但是我的代码抛出了很多错误。如果有人可以详细说明可以完成此操作的不同方法以及每种方法的根本原因以及正确方法,那将非常有帮助。

最佳答案

首先,您不返回作用域局部变量的引用

std::string& string_reverse(std::string& str){
// ^

将其更改为

std::string string_reverse(std::string& str){

这里不能返回引用,因为 rev 变量会在函数返回后被销毁(参见 Can a local variable's memory be accessed outside its scope? )。

其次,您不使用 &创建引用:

 return &rev;
// ^

这将采用 rev 的地址(即指针)。你只需写(无论哪种情况)

 return rev;

最后但同样重要的是,您不需要为输入参数传递非 const 引用。写的比较好

std::string string_reverse(const std::string& str){ 
// ^^^^^

如果函数不改变str

关于c++ - C++ 中的指针和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28611541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com