Я попытался напечатать адрес каждого символа 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
-завершением. - person wkl   schedule 16.09.2011char*
иint*
для std::ostream. - person Thomson   schedule 16.09.2011