c – std :: string的每个字符的地址

前端之家收集整理的这篇文章主要介绍了c – 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

解决方法

当std :: ostream尝试打印char *时,它假定它是C风格的字符串.

在打印之前将其投射到空白*,您将得到您所期望的:

cout << (void*) &str[i] << endl;

猜你在找的C&C++相关文章