我尝试打印std::string
每个字符的地址。但是我不理解std::string
内部发生了什么,导致输出结果与数组不同。对于数组,输出的地址符合我的预期。有人可以解释一下发生了什么吗?
#include <iostream>
#include <string>
using namespace std;
int main(){
string str = "Hello";
int a[] = {1,2,3,4,5};
for( int i=0; i<str.length(); ++i )
cout << &str[i] << endl;
cout << "**************" << endl;
for( int i=0; i<5; ++i )
cout << &a[i] << endl;
return 0;
}
输出:
Hello
ello
llo
lo
o
**************
0x7fff5fbff950
0x7fff5fbff954
0x7fff5fbff958
0x7fff5fbff95c
0x7fff5fbff960
char*
,这意味着它将尝试打印C风格的字符串(直到遇到\0
或触及不应该有的地址)。你正在做的第二件事只是运行一个int
数组并打印地址int*
。此外,请注意不要在实际代码中使用前者,因为不能保证std::string
以NULL
结尾。 - wklchar*
和int*
之间不同的输出逻辑所导致的。 - Thomson