Próbowałem wydrukować adres każdej postaci std::string
. Ale nie rozumiem, co się dzieje wewnętrznie z std::string
, które powoduje to wyjście, podczas gdy dla tablicy podaje adres zgodnie z oczekiwaniami. Czy ktoś mógłby wyjaśnić, co się dzieje?Adres każdego znaku 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;
}
wyjściowa:
Hello
ello
llo
lo
o
**************
0x7fff5fbff950
0x7fff5fbff954
0x7fff5fbff958
0x7fff5fbff95c
0x7fff5fbff960
The próbuje najpierw wydrukować 'char *', co oznacza, że spróbuje wydrukować ciąg w stylu C (dopóki nie dotrze do '\ 0' lub nie dotknie adresu). Drugą rzeczą, którą robisz, jest po prostu przechodzenie przez tablicę 'int' i drukowanie adresu' int * '. Należy również uważać, aby nie używać pierwszego z nich w rzeczywistym kodzie, ponieważ 'std :: string' nie ma gwarancji, że zostanie zakończone z wartością" NULL ". – birryree
Różnica tutaj nie jest spowodowana przez std :: string, ale spowodowana przez różną logikę wyjściową pomiędzy 'char *' i 'int *' dla std :: ostream. – Thomson