我在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;
}
更像这些
答案 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为0
或1
(第一个索引的有效值)时才有效。其他值(在循环中最多包含18
)不是arer
的有效元素 - 因此访问它们会产生未定义的行为。