如何在c ++中将字符串的地址移动到函数[关闭]

问题描述 投票:-1回答:2

我试图将字符串的地址发送到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++中的行为方式。

c++ arrays string
2个回答
2
投票

您可以将字符串作为参数传递给函数,并将字符串引用作为函数中的参数。但是您需要了解字符串不是数组,它是字符串类的对象。您可以对字符串使用索引的原因是因为[]运算符为字符串类重载。

你上面做的是传递一个指针。为了使它按照您的方式工作,您的函数必须取消引用指针:

#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块语法,并且可能会混淆编译器。


0
投票

您正在访问单个字符串作为字符串数组,而不是。如果您尝试访问字符串的第二个字符,则必须先取消引用它,然后像这样访问字符:

#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 ++中,数组和指针彼此非常接近。 *aa[0]几乎相同,这意味着在指针上使用a[2]与使用*(a+2)相同。

你必须记住,你没有在这里使用c-string比特c ++ - std :: string这是一个对象,而不是像c中的简单内存结构。

因此,您首先必须取消引用该对象,然后才能使用它重载的[]-operator来访问它的成员(在这种情况下为chars)。

© www.soinside.com 2019 - 2024. All rights reserved.