2016-08-27 5 views
-5

я делал трехмерный массив в C++ и я получаю шестнадцатеричные числаПочему я получу шестнадцатеричные числа в C++?

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

Я использовал, чтобы получить выходной сигнал как

0xbebd5ea4 

и больше похожи на эти

+2

Остановите думать, что бы вы ни думали. Не выходите за пределы; ваши оценки - 2, 3 и 3. –

ответ

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

Что вы делаете g печатает адреса некоторой памяти.

2

arer - 3-мерный массив (массив из 2-мерных массивов). arer[x] - это массив 3x3 из int. Массив, передаваемый любой функции в качестве аргумента (который включает в себя поток operator<<()), преобразуется в указатель (к первому элементу). При передаче массива 3x3 передается указатель на массив из 3 элементов.

Поскольку один вариант ostream s operator<<() принимает void *, большинство указателей будут неявно преобразованы в void * и передаются в эту версию. Вот что здесь происходит. A void * представляет собой адрес в памяти. По соглашению адреса часто печатаются в шестнадцатеричной форме.

Кроме того, в вашем примере arer[x] действителен только в том случае, если x равен 0 или 1 (действительные значения первого индекса). Другие значения (до 18 включительно в вашем цикле) являются недопустимыми элементами arer - поэтому доступ к ним дает неопределенное поведение.

Смежные вопросы