Конструктор не будет принимать массив, инициализированный с новым, в качестве параметра - PullRequest
0 голосов
/ 17 мая 2018

Предположим, я создал конструктор, который принимает int m [5] [5]. Всякий раз, когда я инициализирую массив в main наподобие: (int k [5] [5];) и передаю его в качестве аргумента конструктору он работает нормально. Тем не менее, я попытался выделить 2-й массив, как показано ниже:

  int **d=new int*[5];
   for(int i=0;i<5;i++){
   d[i]=new int[5];  }

    //5x5 matrix

и конструктор не будет принимать массив в качестве параметра. Почему это происходит?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018
int d[5][5];

не определяет двойной указатель, хотя синтаксис может заставить вас так думать. См. Почему мы не можем использовать двойной указатель для представления двумерных массивов?

0 голосов
/ 17 мая 2018

Указатель на указатели, каждый из которых несет массив, не является двумерным массивом, поэтому d [n] [m] не ** d, хотя вы можете обрабатывать оба этих параметра одним и тем же способом, чтобы получить значения из них следующим образом: d[i] [j].

Поэтому создайте ваш конструктор следующим образом:

className(int **d);

или просто передайте обычный 2D-массив, и ваш конструктор будет выглядеть так:

className(int d[5][5]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...