为什么我在c ++中得到十六进制数?

时间:2016-08-27 12:09:05

标签: c++ arrays

我在c ++中制作了一个三维数组,我得到了十六进制数字

var imported = JSON.parse(require('fs').readFileSync('.\\config.json') + '');

我曾经得到像

这样的输出
#include <iostream>

using namespace std;

int main(){
    int arer[2][3][3] = {{{1,2,3}, {4,5,6}, {7,8,9}}, {{10,11,12}, {13,14,15} ,{16,17,18}}};
    for(int x = 0;x <= 18;x++){
        cout << arer[x] << "     ";
    }

return 0;           
}           

更像这些

2 个答案:

答案 0 :(得分:2)

这是打印3D阵列的正确方法:

int main(){
    int arer[2][3][3] = {{{1,2,3}, {4,5,6}, {7,8,9}}, {{10,11,12}, {13,14,15} ,{16,17,18}}};
    for(int i = 0;i < 2;i++){
        for(int j = 0;j < 3;j++){
            for(int k = 0;k < 3;k++){
                std::cout << arer[i][j][k] << "     ";
            }
        }
    }

    return 0;
}

您正在做的是打印一些内存的地址。

答案 1 :(得分:2)

arer是一个三维数组(二维数组的数组)。 arer[x]是一个3x3的int数组。数组作为参数传递给任何函数(包括流的operator<<())时会转换为指针(指向第一个元素)。如果传递3x3数组,则传递指向3个元素数组的指针。

由于ostream s operator<<()的一个变体接受void *,因此大多数指针将隐式转换为void *并传递给该版本。这就是这里发生的事情。 void *表示内存中的地址。按照惯例,地址通常以十六进制形式打印。

此外,在您的示例中,arer[x]仅在x为01(第一个索引的有效值)时才有效。其他值(在循环中最多包含18)不是arer的有效元素 - 因此访问它们会产生未定义的行为。