我的代码出了什么问题?我想打印出数组,但是当我尝试这样做时,似乎打印出一个地址。
#include <iostream>
#include <ctime>
#include <stdlib.h>
using namespace std;
int main ()
{
srand(time(NULL));
int array[9]= {0};
for (int i=0;i<=8;i++)
{
array[i]= (rand()%101);
}
cout<< array;
system ("PAUSE");
return 0;
}
答案 0 :(得分:4)
你不能只是cout
一个数组。数组不是cout
- 能够的。只要您成功cout
T
类型的某些内容,就意味着有一个专门设计的重载<<
运算符,专门设计为cout
类型T
的值。对于<<
数组(除了字符串),没有专用的cout
运算符。因此,编译器为给定的参数类型选择最接近的匹配:指针的<<
运算符。由于数组可以转换为指针,因此<<
适用于此。
如果你想cout
数组中所有元素的值,你必须手动cout
逐个,或者使用一些可以为你做的标准算法。例如
std::copy(array, array + 9, std::ostream_iterator<int>(std::cout, " "));
答案 1 :(得分:2)
你需要做一个循环来自己输出每个数组元素。
问题是C ++并不总是知道数组的大小,所以它不能默认输出整个东西。
答案 2 :(得分:1)
您需要遍历数组并打印每个元素,就像在每个索引处分配值一样。由于数组衰减指向序列中第一个元素的指针,因此您将获得该地址。
答案 3 :(得分:0)
std::cout
没有int array[9]
的重载,所以这会衰减到指针(int*
),这就是你所看到的显示(类似于0x7fffe47142d0
)。
要单独打印数组中的int
,您需要使用循环结构(如用于填充数组的for
- 循环)并发送每个int
1}}依次为std::cout
,可能还有一些空格来格式化它们。
一旦掌握了C ++及其标准库,您可能需要调查如何使用std::copy()
进行此操作,但我怀疑这对您的作业来说有点先进。
答案 4 :(得分:0)
当值作为参数传递给函数时,C ++将数组类型衰减为指针类型。 C ++ 11有std::array
(并且TR1指定std::tr1::array
),它保留了数组的大小。以下是您使用std::array
修改的示例:
#include <array>
#include <iostream>
#include <ctime>
#include <stdlib.h>
template<typename T, std::size_t N>
std::ostream& operator<< (std::ostream& ostm, const std::array<T, N>& a)
{
for (auto const& x : a)
ostm << x << ' ';
return ostm;
}
int main ()
{
srand(time(NULL));
std::array<int, 9> array;
for (auto& x : array)
x = rand() % 101;
std::cout<< array << std::endl;
}