En passant un pointeur représentant un tableau 2D à une fonction en C++
Selon ce site, je devrais être en mesure d'utiliser le code suivant:
double stuff[3][3];
double **p_stuff;
p_stuff = stuff;
Mais je reçois une plainte que la conversion n'est pas autorisé par la cession.
Je fais quelque chose de mal?
J'ai un extern "C" type de fonction que je veux faire passer ce stuff double[3][3]. Donc, je pense que j'ai besoin de faire un pointeur, non?
Pas la note est mauvaise.
Essayez p_stuff = new double *trucs[3] après la double **p_stuff
Qu'est-ce que la signature de cette fonction C?
Édité question afin de refléter mon intention..obtenir ce stuff double[3][3] pour une fonction C.
Je suis en train d'écrire la fonction C...de sorte que je peux faire de la signature de ce que je veux. Maintenant que je l'ai eu comme (....., double **p_stuff, ...)
double[3][3]
ne peut pas être décomposée à double**
(il se désintègre à (double*)[3]
).Essayez p_stuff = new double *trucs[3] après la double **p_stuff
Qu'est-ce que la signature de cette fonction C?
Édité question afin de refléter mon intention..obtenir ce stuff double[3][3] pour une fonction C.
Je suis en train d'écrire la fonction C...de sorte que je peux faire de la signature de ce que je veux. Maintenant que je l'ai eu comme (....., double **p_stuff, ...)
OriginalL'auteur Derek | 2011-03-16
Vous devez vous connecter pour publier un commentaire.
Concernant le montage: pour passer ce
double stuff[3][3]
à une fonction C, vous pourriez1) passer un pointeur à l'ensemble du tableau 2D:
2) passer un pointeur vers le premier 1D array (première ligne) et le nombre de lignes
3) de passer un pointeur vers la première valeur dans la première ligne et le nombre de colonnes et de lignes
(que cette dernière option n'est pas strictement conforme aux normes, puisqu'elle avance un pointeur vers un élément d'un tableau 1D (la première ligne) - delà de la fin de ce tableau)
Si ce n'était pas une fonction C, il y avait un peu plus d'options!
template <std::size_t N, std::size_t M> void process( double (&a)[N][M] );
si vous voulez être en mesure de travailler avec des tailles différentes. Mélanger et assortir comme vous le souhaitez: si vous souhaitez uniquement pour permettre au carré des tableaux de l'utilisation d'un modèle unique argument.OriginalL'auteur Cubbi
Votre attribué est erronée.
p_stuff;
est pointeur de pointeur dedouble
alors questuff
est tableau à deux dimensions( tableau de tableaux)Une seule dimension de la matrice de désintégrations le pointeur vers son premier élément. 2 dimensions de la matrice de désintégrations de pointeur vers un tableau unidimensionnel.
Essayer cette
OriginalL'auteur Prasoon Saurav
double ** p_stuff;
correspond à un tableau de pointeur de double.double stuff[3][3]
n'ont pas de pointeurs - c'est un tableau 2D de double.OriginalL'auteur Erik
Ci-dessous est peut-être votre réponse:
Le résultat sur l'écran de la console:
OriginalL'auteur Thảo Hoàng Minh
En plus de Cubbi détaillées de réponse, la façon suivante est tout naturel de passer à 2 dim tableau à une fonction:
Vous n'avez pas à les jeter à l'avance, car le nouveau C++ (C++14) prend en charge au moment de l'exécution de la taille des tableaux.
OriginalL'auteur Simon Woo