对cout的C ++内存地址

时间:2015-12-27 17:01:21

标签: c++ std-pair

当我使用下面的代码时,我在对的第二项之前得到一个mem地址(?),如下所示: 666, 0x6090e8 667 666, 0x6090e8 667 666, 0x6090e8 667。

我做错了什么?

std::vector<std::vector<std::vector<std::pair<int,int> > > > total;

int main()
{

  total.resize(10);
  for (int i = 0; i < 10; ++i)
    {
      total[i].resize(10);
    }

  for (int i = 0; i < 10; i++)
    {
      total[0][0].push_back(std::make_pair(666,667));
    }

  for (int i=0; i<3; i++)
    {
      std::cout << total[0][0][i].first << ", " <<
      std::cout << total[0][0][i].second << '\t';
    }
  std:: cout << std::endl;

}

3 个答案:

答案 0 :(得分:3)

std::cout << total[0][0][i].first << ", " <<
std::cout << total[0][0][i].second << '\t';

由于第一行末尾的<<,您将std::cout(在第二行)输出到cout,就像您键入{{1}一样}}。显然你的编译器有一个重载或转换,导致它显示一个内存地址(虽然它可能无法在其他编译器上编译)。

用分号替换它,或从第二行删除std::cout << std::cout;

答案 1 :(得分:0)

有关

i
你可能意味着

var inputs = document.querySelectorAll("input[type=text]")
for (i = 0; i < inputs.length; i++) {
  inputs[i].addEventListener('click', function(i) {
    inputs[i].style.width = "500px";
  }.bind(this, i));
}

答案 2 :(得分:0)

您使用过std::cout << total[0][0][i].first << ", " <<。该行末尾的额外<<(并且没有分号)最终将下一个std::cout输出到您的第一个std::cout语句中。

它的行为如下:std::cout << std::cout导致显示地址。

您可能想要使用: 而是std::cout << total[0][0][i].first << ", ";