首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改传递给C++中函数的字符串指针的值?

如何更改传递给C++中函数的字符串指针的值?
EN

Stack Overflow用户
提问于 2022-03-30 13:55:35
回答 2查看 219关注 0票数 -2

我需要使用函数更改std::string的值。

函数必须是空的,参数必须是指向字符串的指针,如图所示。

代码语言:javascript
复制
#include <iostream>

void changeToBanana(std::string *s) {
    std::string strGet = "banana";
    std::string strVal = strGet;
    s = &strVal;
}

    int main() {
    std::cout << "Hello, World!" << std::endl;

    std::string strInit = "apple";
    std::string* strPtr;
    strPtr = &strInit;
        changeToBanana(strPtr);
        std::cout << *strPtr << std::endl;
        return 0;
    }

我希望得到的打印结果是“香蕉”,其他答案涉及更改参数。

我尝试过使用for循环分配字符串,然后逐个元素执行元素,但这不起作用。价值保持不变。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-30 14:09:39

函数必须是空的,参数必须是指向字符串的指针,如图所示。

使用此要求,您不能更改传递给函数的指针的值,因为它是通过值传递的。

不要把指针和它所指的混淆起来。参数是通过值传递的(除非通过引用传递它们)。在函数中对s所做的任何更改都不适用于main中的指针。

但是,您可以更改指针指向的字符串(因为s指向与main中的指针相同的字符串):

代码语言:javascript
复制
void changeToBanana(std::string *s) {
    std::string str = "banana";
    *s = str;
}

然而,这不是惯用的C++。您应该传递一个引用void changeToBanana(std::string& s)或返回字符串std::string returnBanana()

票数 1
EN

Stack Overflow用户

发布于 2022-03-30 14:16:52

代码语言:javascript
复制
void changeToBanana(std::string *s) {
    std::string strGet = "banana";
    std::string strVal = strGet;
    
    // the following line doesn't do anything
    //  useful, explanation below
    s = &strVal;
}

s = &strValstrVal的地址分配给s。然后函数结束,对s的任何修改都被“遗忘”,因为schangeToBanana的局部变量。

因此,打电话给changeToBanana(&foo)什么都不做。

你要么想要这个:

代码语言:javascript
复制
void changeToBanana(std::string *s) {
    *s = "banana";
}
...
std::string strInit = "apple";
changeToBanana(&strInit);    

或者这个(因为您不需要指针):

代码语言:javascript
复制
void changeToBanana(std::string & s) {
    s = "banana";
}
...
std::string strInit = "apple";
changeToBanana(strInit);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71678559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档