我試圖打印std::string
的每個字符的地址。但我不知道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
首先嚐試打印'字符*'這意味着它會嘗試打印一個C風格的字符串(直到它碰到'\ 0'或觸及它不應該有的地址)。你要做的第二件事是通過一個'int'數組並運行地址'int *'。還要注意不要在實際代碼中使用前者,因爲'std :: string'不能保證以NULL結尾。 – birryree
這裏的區別不是由std :: string引起的,而是由std :: ostream的'char *'和'int *'之間的不同輸出邏輯引起的。 – Thomson