如何在 C++ 中通过指针传递字符串?

Posted

技术标签:

【中文标题】如何在 C++ 中通过指针传递字符串?【英文标题】:how to pass a string by pointer in C++? 【发布时间】:2020-09-18 04:06:42 【问题描述】:

在 C++ 编程中,我将字符串作为指针传递

代码:

#include<iostream>
using namespace std;
void changeString(string *s) 
    // change s[1] to 'a' inside this function


int main(void) 
    string s = "ayush";
    changeString(&s);
    cout<<s;

我写了代码 *s[1] = 'a',但它显示错误。我如何访问函数“changeString”中字符串的第一个字符。请帮助任何支持表示赞赏。

【问题讨论】:

*s[1] 解析为*(s[1])。你想要的是(*s)[1] 推荐通过引用传递 【参考方案1】:

根据C++ Operator Precedence,下标的优先级高于取消引用。 所以正如评论中提到的@dxiv *s[1] 被解析为*(s[1])

所以你需要使用括号将优先级更改为(*s)[1]

顺便说一句,使用string::replace而不是赋值运算符是safer way to change string。

更好的是,恕我直言,使用引用是更多的 c++ 方式。例如检查下面的代码。

#include<iostream>
using namespace std;

void changeStringWithReference(string &s) 
    s[3]= 'a';


void changeString(string *s) 
    (*s)[1] = 'a';
    // better to use string::replace


int main(void) 
    string s = "abcde";
    changeString(&s);
    cout << s << endl;
    changeStringWithReference(s);
    cout << s << endl;


【讨论】:

以上是关于如何在 C++ 中通过指针传递字符串?的主要内容,如果未能解决你的问题,请参考以下文章

在python中通过引用传递引用

在函数c ++中通过引用传递的指针参数

在 Go Lang 中通过通道传递指针

将指针传递给函数不是在 C 中通过引用传递吗?

C ++参考如何在幕后工作[重复]

在 C++ 中通过指针捕获异常