我的代码打印出地址而不是数组值

My code prints out the address instead of the array value?

本文关键字:数组 地址 代码 打印 我的      更新时间:2023-10-16

我的代码有什么问题?我想打印出数组,但是当我尝试这样做时,它似乎打印出一个地址。

#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;
}