2015-01-11 2 views
-1

Проблема в том, что когда я пытаюсь отобразить этот массив, он возвращает мне направление памяти каждого компонента. Большое спасибо заранее, и я сожалею, если на это был дан ответ, но я не смог его найти.
EDITEDОтображение структуры массива C++

#include <stdio.h> 
    #include <fstream> 
    using namespace std; 
    struct tabla{ 
     int Ar[9][9]; 
    }; 
    void print(){ 
     tabla matrix[9][9]={{1,2,3,4,5,6,7,8,9}, 
     {9,8,7,4,5,6,1,2,3}, 
     {7,3,2,1,5,6,4,8,9}, 
     {9,5,1,7,5,3,4,8,6}, 
     {7,4,1,8,5,2,9,6,3}, 
     {3,6,9,2,5,8,7,8,4}, 
     {0,1,4,7,2,5,8,8,7}, 
     {0,0,1,0,0,0,0,0,0}, 
     {1,1,1,1,1,1,1,1,1}}; 

     for(int i=0;i<9;i++){ 
      for(int j=0;j<9;j++){ 
       cout<<matrix[i][j].Ar<<' '; 
      } 
      cout<<endl; 
     } 
    } ` 

    int main(){ 

     print(); 
     } 

Я попытался написав (с I've читал во многих местах, что это связано с указателями)
соиЬ < < ** новый [я] [J] .Ar < < '' ; который работает, но только для первого компонента каждого «вектора», после чего он печатает нули.

+0

'new' - это ключевое слово в C++. –

+0

Пожалуйста, покажите реальный код, очищенный и уменьшенный до минимальной суммы, необходимой для демонстрации проблемы. –

+0

Вам нужен подобный цикл для массива * внутри * каждый экземпляр 'Array' как тот, который вы используете для массива' Array'. Они называются 'some_other_name_than_new [i] [j] .Ar [k] [l]', если вы перебираете 'k' и' l'. – molbdnilo

ответ

1

Я думаю, что вы имеете в виду что-то в качестве следующего

#include <iostream> 

struct Array 
{ 
    const static size_t N = 9; 
    int Ar[N][N]; 
}; 

void print() 
{ 
    Array *a = new Array 
    { 
     { 
      {1,2,3,4,5,6,7,8,9}, 
      {9,8,7,4,5,6,1,2,3}, 
      {7,3,2,1,5,6,4,8,9}, 
      {9,5,1,7,5,3,4,8,6}, 
      {7,4,1,8,5,2,9,6,3}, 
      {3,6,9,2,5,8,7,8,4}, 
      {0,1,4,7,2,5,8,8,7}, 
      {0,0,1,0,0,0,0,0,0}, 
      {1,1,1,1,1,1,1,1,1} 
     } 
    }; 

    for (size_t i = 0; i < Array::N; i++) 
    { 
     for (size_t j = 0; j < Array::N; j++) 
     { 
      std::cout << (*a).Ar[i][j] <<' '; 
     } 
     std::cout<< std::endl; 
    } 

    delete a; 
} 


int main() 
{ 
    print(); 
} 

Выход

1 2 3 4 5 6 7 8 9 
9 8 7 4 5 6 1 2 3 
7 3 2 1 5 6 4 8 9 
9 5 1 7 5 3 4 8 6 
7 4 1 8 5 2 9 6 3 
3 6 9 2 5 8 7 8 4 
0 1 4 7 2 5 8 8 7 
0 0 1 0 0 0 0 0 0 
1 1 1 1 1 1 1 1 1 

Примите во внимание, что вы можете использовать смарт-указатель std::unique_ptr внутри функции печати.

+0

Большое спасибо –

-1

Вы используете имя new для имени переменной, которое приведет к тому, что ваш код будет отличаться от того, что вы ожидаете. Используйте что-то еще. Кроме того, Array уже существует в std::, так что это тоже очень плохой выбор.

+0

Ух нет, пытаясь использовать 'new' в качестве идентификатора, приведет к ошибке компилятора. –

+0

@CaptainObvlious, точно. Дело здесь в том, что эта вещь имеет слишком много ошибок и не может быть тем, который был скомпилирован OP. –

+0

downvoter: прокомментируйте! –

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