我的代码打印出地址而不是数组值
My code prints out the address instead of the array value?
我的代码有什么问题?我想打印出数组,但是当我尝试这样做时,它似乎打印出一个地址。
#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;
}
你不能
只cout
一个数组。数组不能cout
。每当您成功cout
T
类型的内容时,这意味着有一个专用的重载<<
运算符专门设计用于cout
T
类型的值。并且没有专用的<<
运算符用于cout
数组(字符串除外)。因此,编译器为给定参数类型选择最接近的匹配项:指针的<<
运算符。由于数组可以转换为指针,因此<<
在这里适用。
如果要cout
数组中所有元素的值,则必须手动逐个cout
它们,或者使用一些可以为您完成此操作的标准算法。例如
std::copy(array, array + 9, std::ostream_iterator<int>(std::cout, " "));
你需要做一个循环来单独输出每个数组元素。
问题是C++并不总是知道数组的大小,所以它不能默认输出整个东西,就像你期望的那样。
您需要遍历数组并打印每个元素,就像您如何在每个索引处分配值一样。由于数组衰减到指向序列中第一个元素的指针,因此您将获得地址。
std::cout
没有int array[9]
重载,所以它会衰减到一个指针(int*
),这就是你会看到显示的内容(类似于0x7fffe47142d0
)。
要单独打印数组中的int
,您需要使用循环构造(如用于填充数组的 for
- 循环)并依次将每个int
发送到std::cout
,也许使用一些空格来格式化它们。
一旦你掌握了C++及其标准库的窍门,你可能想研究如何使用std::copy()
来做到这一点,但我怀疑这对你的家庭作业来说有点高级。
当值作为参数传递给函数时,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;
}
相关文章:
- 将数组的地址分配给变量并删除
- 从 C++ 中的函数返回数组地址问题
- 打印字符数组地址的正确方法
- 字符数组地址和整数数组地址
- C++返回静态数组地址的函数
- C++ 在 64 位平台中传递字符数组地址
- 获取字符数组地址,然后转换为指针字符
- 如何指向实际元素而不仅仅是数组地址
- 如何使用数组地址反转数组
- 链表数组 – 地址簿
- 数组地址的地址
- 缺少存储数组地址的内存
- 将指针数组地址传递给函数并更新地址中的数据
- 通过复制将数组地址传递给匿名函数失败
- 数组地址不可见
- 不了解示例中的行为 - strcpy() 和返回本地数组地址的函数
- 保存数组地址的指针的地址是相同的
- 动态数组地址
- 在C++(代码块)中显示数组地址
- C++ 将数组地址分配给指针