我不确定这里发生了什么,我使用Clion作为我的IDE,我不相信这与此有任何关系,但我想我会添加这些信息。我的困惑来自于我写的一个功能
int Arry()
{
int Mynumbers [5] = {10};
std::cout << Mynumbers;
}
简单的事情。它应该为10个整数赋值10.但是当我打印出Mynumbers时,我会看到内存地址。为什么会发生这种情况,我认为这就是调用指针的原因。感谢您的时间。
此致 尼古拉斯
答案 0 :(得分:3)
这有点复杂,并且有一些问题在起作用:
std::cout
(实际上,std::ostream
,其中std::cout
是一个实例,没有理解普通数组的operator<<
重载。它确实有重载的理解指针。int a[10] = {}; int* p = a;
。char*
或const char*
(或wchar
个版本),在这种情况下,它将其视为一个以null结尾的字符串。这就是这里发生的事情:因为没有匹配数组的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];
}