0
votes

Pointeurs C ++ avec tableaux 2D

Comment implémentez-vous une fonction qui prend un pointeur int * vers un tableau 2D comme entrée? Mon code actuel est:

#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)


6 commentaires

vérifiez ceci: stackoverflow.com/questions/8617466/a- pointeur vers un tableau 2D


Quelle est la question?


Moi non plus, je ne peux pas dire ce que vous demandez. Une question contient généralement un point d'interrogation.


"Je travaille actuellement sur une fonction C ++ sur laquelle je travaille" est probablement le meilleur de ce mois.


Vous devez avoir reçu une description de ce que l'argument est censé être. (Je suppose que vous êtes censé stocker vos données dans un tableau unidimensionnel et calculer l'index unidimensionnel à partir des index bidimensionnels.)


Vous ne pouvez pas passer M comme int * , vous pouvez passer une ligne de M , mais pas l'intégralité du M .


3 Réponses :


1
votes

Les tableaux MxN se désintègrent en un pointeur vers la première ligne (longueur N). Si vous voulez un pointeur vers le début, vous devez permettre à la première ligne de se désintégrer en un pointeur vers le premier élément. Notez également ce que @Pete Becker dit ci-dessous.

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


1 commentaires

Deux tableaux dimensionnels se désintègrent en un pointeur vers la première ligne. Les tableaux de signaux dime se désintègrent en un pointeur vers le premier tableau à deux dimensions. Etc.



-2
votes

M pointant vers la première ligne, mais sa valeur est la même que celle du pointeur vers le premier élément qui est M [0] [0], vous pouvez donc changer l'interprétation pour le compilateur:

int* Mat = reinterpret_cast<int*>(M);


3 commentaires

Le type de M est int [4] [4]


ce n'est pas vrai, définissez-vous une variable comme celle-ci int p [4] [4] = M; ? cela ne compilera même pas.


C'est vrai, la norme C le dit. La raison pour laquelle int p [4] [4] = M; ne compile pas est que les initialiseurs de tableau doivent être une liste entre parenthèses d'initialiseurs pour chaque élément



0
votes

La réponse était assez simple et cela ne m'a pris que 4 heures (je dois adorer le codage). Supprimez donc int * Mat = M [0]; et lors de l'appel de la fonction, il suffit de la refondre en (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 commentaires