Указатели C ++ с 2D-массивами - PullRequest
0 голосов
/ 06 февраля 2019

Как вы реализуете функцию, которая принимает указатель int* на двумерный массив в качестве ввода?Мой текущий код:

#include <iostream>
using namespace std;

int main (void){
  int M [4][4] = {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12},
    {13,14,15,16},
  };
  int* Mat = M;
  myFunc(Mat);
}

void myFunc(int* Matrix)

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

M указывает на первую строку, но его значение совпадает с указателем на первый элемент, который является M [0] [0], поэтому вы можете изменить интерпретацию для компилятора:

int* Mat = reinterpret_cast<int*>(M);
0 голосов
/ 06 февраля 2019

Ответ был довольно прост, и это заняло у меня всего 4 часа (надо любить кодирование).Так что вынимайте int* Mat = M[0]; и при вызове функции просто переводите как (int*)

#include <iostream>

void myFunc(int* Matrix);

int main (void){
  int M [4][4] = {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12},
    {13,14,15,16},
  };

  myFunc((int*)M);
}
0 голосов
/ 06 февраля 2019

MxN массивы распадаются на указатель на первый ряд (длина N).Если вам нужен указатель на начало, вам нужно разрешить первой строке затухать до указателя на первый элемент.Также обратите внимание, что @Pete Becker говорит ниже.

#include <iostream>

void myFunc(int* Matrix);

int main (void){
  int M [4][4] = {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12},
    {13,14,15,16},
  };

  int* Mat = M[0];
  myFunc(Mat);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...