首页 > 解决方案 > 多维数组打印十六进制数字而不是数组的内容

问题描述

我在玩多维数组,想知道这段代码发生了什么,使它打印出十六进制而不是数组的实际内容。我知道这可能是一个愚蠢的问题,但希望有人能解释一下这是我第一年的编程。

#include <iostream>

void print(int A[][3],int N, int M)
{
  for (int R = 0; R < N; R++)    // Why when executed does this code output:
    for(int i = 0; i < 4; i++)   //0x61fdf0 0x61fdf0 0x61fdf0 0x61fdf0
    std::cout << A[R] << " ";    //0x61fdfc 0x61fdfc 0x61fdfc 0x61fdfc
  for (int C = 0; C < M; C++)    //0x61fe08 0x61fe08 0x61fe08 0x61fe08
    for(int j = 0; j < 3; j++)   //0x61fe14 0x61fe14 0x61fe14 0x61fe14
    std::cout << A[C] << " ";    //0x61fdf0 0x61fdf0 0x61fdf0 0x61fdfc
}                                //0x61fdfc 0x61fdfc 0x61fe08 0x61fe08 0x61fe08

int main ()
{
  int arr[4][3] ={{12, 29, 11},
                  {25, 25, 13},
                  {24, 64, 67},
                  {11, 18, 14}};
  print(arr,4,3);
  return 0;
}

标签: c++arrays

解决方案


如果你有一个像 的二维数组int arr[4][3],那么arr本质上只是一个指向整个二维数组的内存地址。

同样,arr[X]也是一个指向二维数组的一行的地址。所以打印:

std::cout << arr;
std::cout << arr[1];

将打印一个内存地址,该地址仅在屏幕上显示为十六进制数字。

要获取底层int,您需要指定的两个索引arr,如下所示:

std::cout << arr[1][1];  // prints an int

当然,同样的事情也适用A于你的功能。


推荐阅读