我尝试了这段代码,我无法理解为什么我得到输出为" HL"而不是" Hl"。 有人请解释一下。
void t(string *s){
s[1]='l';
}
int main(){
string s = "HL";
t(&s);
cout<<s;
}
答案 0 :(得分:5)
您现在拥有的是通过将其设置为'l'
来更新现有字符串。这是未定义的行为。
这是失败的原因是你将指针索引,好像它指向一个字符串数组(当它实际上指向一个字符串时)。你打算做的是索引实际的字符串以获得它的特征。您必须首先取消引用指针,如下所示:
void t(string *s){
(*s)[1]='l';
}
int main(){
string s = "HL";
t(&s);
cout<<s;
}
如果你实际上正在使用引用,比如建议的标题,你就不需要做任何特殊的语法:
void t(string& s){
s[1]='l';
}
int main(){
string s = "HL";
t(s);
cout<<s;
}
答案 1 :(得分:2)
在函数t
中,s
是string*
,因此s[1]
相当于*(s+1)
。 ITW,它被视为指向string
数组开头的指针,索引为1
的元素被设置为"l"
。将代码更改为(*s)[1] = 'l';
以执行您的操作。