我试图将字符串的地址发送到C++
中的函数,但我遇到的问题如下面的代码:
#include<iostream>
#include<string>
using namespace std;
void try2(string *a){
cout<<a[2];
}
int main(){
string a;
getline(cin,a);//string length is greater than 10
try2(&a);
}
我正在做同样的事情,我们在C
为字符串做。但我对C++
的想法不多。请建议并描述字符串在C++
中的行为方式。
您可以将字符串作为参数传递给函数,并将字符串引用作为函数中的参数。但是您需要了解字符串不是数组,它是字符串类的对象。您可以对字符串使用索引的原因是因为[]
运算符为字符串类重载。
你上面做的是传递一个指针。为了使它按照您的方式工作,您的函数必须取消引用指针:
#include<iostream>
#include<string>
using namespace std;
void try2(string *a){
cout<<(*a)[2];
return;
}
int main(){
string a;
getline(cin,a);//string length is greater than 10
try2(&a);
}
这将允许您打印通过引用该函数传递的字符串对象的第三个字符。
注意:不要将try用作函数名,因为它已被许多语言保留用于try-catch块语法,并且可能会混淆编译器。
您正在访问单个字符串作为字符串数组,而不是。如果您尝试访问字符串的第二个字符,则必须先取消引用它,然后像这样访问字符:
#include<iostream>
#include<string>
using namespace std;
void try(string *a){
cout<<(*a)[2];
}
int main(){
string a;
getline(cin,a);//string length is greater than 10
try(&a);
}
这是因为在c ++中,数组和指针彼此非常接近。 *a
和a[0]
几乎相同,这意味着在指针上使用a[2]
与使用*(a+2)
相同。
你必须记住,你没有在这里使用c-string比特c ++ - std :: string这是一个对象,而不是像c中的简单内存结构。
因此,您首先必须取消引用该对象,然后才能使用它重载的[]
-operator来访问它的成员(在这种情况下为chars)。