【问题标题】:Multidimensional array prints hexadecimal numbers instead of the contents of the array. Why?多维数组打印十六进制数字而不是数组的内容。为什么?
【发布时间】:2018-08-09 07:04:55
【问题描述】:
...C++.....................
#include <iostream>
using namespace std;

int main() {

int troysArray[3][3] = {
    {3,2,7},
    {4,5,8},
    {1,9,2},
};

int i;
int j;

for (i = 0;i < 3;i++)
    for (j = 0;j < 3;j++){

    cout << troysArray[i] << endl;
    cout << troysArray[j] << endl;
};

return 0;
}
.......................
C++

当我实际尝试打印数组的内容时,为什么上面的代码会打印出十六进制数字。 (初学者/刚刚练习)

我做错了什么导致这种情况发生?

【问题讨论】:

  • 在问题中包含输出。
  • troysArray[i] --> troysArray[i][j]

标签: c++ multidimensional-array printing hex


【解决方案1】:

troysArray[i]std::ostream &lt;&lt; 运算符的最佳重载是 void*(利用指针衰减),并输出 地址指针。

如果你想要一个元素,请使用troysArray[i][j] &c。

【讨论】:

    【解决方案2】:

    troysArray[i]troysArray[j] 是指向数组的指针。如果要在ij 打印元素,请使用

    cout << troysArray[i][j] << endl;
    

    【讨论】:

    • 你想要cout &lt;&lt; troysArray[i][j] &lt;&lt; endl; 吗?
    • 谢谢。您的建议使其停止以十六进制打印,但它以垂直线打印数组的元素。如何让它以类似桌子的方式打印?或者,首先包含每个元素的索引?
    【解决方案3】:

    troysArrayint 的数组。
    因此,troysArray[i]int 的数组,troysArray[j] 也是。

    operator &lt;&lt; 的数组没有 int 的重载。
    但是,void* 有一个。

    当您将数组作为参数传递时,实际传递的是指向数组第一个元素的指针。
    (在你的情况下,它们是&amp;troysArray[i][0]&amp;troysArray[j][0],都是int* 类型。)

    int* 可以隐式转换为void*,因此可以使用void*operator &lt;&lt;

    此重载以十六进制形式输出指针的值。

    为了打印ints,您需要打印每个数组troysArray[i]的元素j

    cout << troysArray[i][j] << endl;
    

    要打印得更像“矩阵”,每行占一行:

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            cout << troysArray[i][j] << ' ';
        }
        cout << endl;
    }
    

    【讨论】:

      【解决方案4】:

      以网格形式打印表格的内容(如 Guarev Senghai 的回答中的一个 cmets 中所问:

      #include <iostream>
      using namespace std;
      
      int main() {
      
      int troysArray[3][3] = {
          {3,2,7},
          {4,5,8},
          {1,9,2},
      };
      
      int i;
      int j;
      
      for (i = 0;i < 3;i++)
      {
          for (j = 0;j < 3;j++)
          {
              cout << troysArray[i][j];  
      
              //uncomment the next line to have a spaces between the numbers.
              cout << " ";
          }
          cout << endl;
      }
      
      return 0;
      }
      

      【讨论】:

      • Spoonless,上面的代码更接近了,但这就是发生的事情:327458192。有没有办法打印如下:327 endl 458 endl 192 endl ??
      • 是的,只需从第一个 cout 中取出最后一点
      • 我更改了代码,使其更清楚如何不打印数字之间的空格
      • @user9954181 不客气。如果它解决了您的问题,请将其标记为已接受的答案,以帮助其他有类似问题的人将来找到它
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 2018-03-17
      • 2016-06-17
      • 1970-01-01
      • 2013-12-13
      • 2015-12-16
      相关资源
      最近更新 更多