理论上这很简单:
如果我有一个字符串animal = "Boar"
;
如何将动物指向'O'
?
我试过这个:
int main(int argc, char** argv) {
string *spoint = new string;
string word = "Hello";
spoint = &word;
spoint++;
cout << (*spoint);
return 0;
}
它没有用。
我希望cout << word;
首先打印"Word"
,如果字符串单词指向,则运行操作,因此cout << word;
将打印"ord"
。
必须有一个简单的方法吗?
答案 0 :(得分:2)
我认为你缺少一些基本的指针算法。让我们采取以下代码片段:
int* spoint;
spoint++;
如果spoint
指向地址为int
的{{1}},则在执行上述操作后,1000
将指向旁边的spoint
字节位置当前位置,因为下一个sizeof(int)
将在int
处可用。此操作会将指针移动到下一个内存位置1000 + sizeof(int)
(如果1004
的大小为{{} 1}}字节)而不影响内存位置的实际值。
同样的情况是字符串。
int
4
后string word[] = {"Hello","world"};
string* spoint = word;
spoint++;
指向spoint++
而不是spoint
的{{1}},这就是为什么你没有正确的输出。如果你想访问字符串中的字符,你应该使用其他人提到的"world"
。
首先,您必须将e
转换为 C字符串(以空字符结尾的字符序列),同时将其分配给"Hello"
,然后您可以将其递增访问角色。
char*
现在word
会在递增后指向char*
string word = "word";
const char *spoint = word.c_str();
spoint++;
cout <<spoint<<endl;
,如果您使用spoint
打印,则输出将为'o'
。
答案 1 :(得分:1)
我觉得你将char *
与C ++ string
对象混淆了。
通过使用两者,你可以获得类似于你所要求的东西 - 尽管我不确定这是你真正想要的东西
int main(int argc, char** argv) {
string word = "Hello";
const char* spoint = word.c_str()
spoint++;
cout << (*spoint);
return 0;
}