内存地址显示? C ++

时间:2017-11-13 20:55:16

标签: c++ memory-management

我不确定这里发生了什么,我使用Clion作为我的IDE,我不相信这与此有任何关系,但我想我会添加这些信息。我的困惑来自于我写的一个功能

int Arry()
{

int Mynumbers [5] = {10};

    std::cout << Mynumbers;
}
简单的事情。它应该为10个整数赋值10.但是当我打印出Mynumbers时,我会看到内存地址。为什么会发生这种情况,我认为这就是调用指针的原因。感谢您的时间。

此致 尼古拉斯

4 个答案:

答案 0 :(得分:3)

这有点复杂,并且有一些问题在起作用:

  1. std::cout(实际上,std::ostream,其中std::cout是一个实例,没有理解普通数组的operator<<重载。它确实有重载的理解指针。
  2. 在C ++(和C)中,数组名称可以用作需要指针的位置的表达式。当没有更好的选项时,数组名称将衰减到指针。以下是合法的:int a[10] = {}; int* p = a;
  3. 带指针的重载将其打印为十六进制地址,除非指针属于char*const char*(或wchar个版本),在这种情况下,它将其视为一个以null结尾的字符串。
  4. 这就是这里发生的事情:因为没有匹配数组的operator<<重载,它会衰减到指针的过载。由于它不是字符类型指针,因此您可以看到十六进制地址。您看到相当于cout << &MyNumbers[0];

答案 1 :(得分:2)

一些注意事项:

st_id_list

答案 2 :(得分:1)

在C ++中,您可以将数组视为指向内存地址的指针(这不是严格正确的,其他人可以解释细微差别)。当您在阵列名称上调用cout时,您要求它的内容:内存地址。

如果您希望查看数组中的内容,可以使用简单的for循环:

for (int i = 0; i < 5; i++)
  std::cout << Mynumbers[i] << " ";

答案 3 :(得分:0)

Mynumbers的值实际上是数组中第一个元素的地址。

尝试以下方法:

for(int i=0; i<5;i++) {
    cout << Mynumbers[i];
}