comment accéder à la 3-d tableau à l'aide de pointeur vers un tableau
j'ai déclaré un pointeur vers un groupe de 3-d de la matrice de qui j'ai partagé ci-dessous.J'ai un problème pour accéder aux éléments de la 3-d tableau à l'aide de pointeurs vers les 3-d tableau.
#include <stdio.h>
void main()
{
int m,row,col;
int *ptr,*j;
int array[2][5][2]={10,20,30,40,50,60,70,80,90,100,18,21,3,4,5,6,7,81,9,11};
int (*p)[5][2]; // pointer to an group of 3-d array
p=array;
for(m=0;m<2;m++)
{
ptr=p+m;
for(row=0;row<5;row++)
{
ptr=ptr+row;
for(col=0;col<2;col++)
{
printf("\n the vale is %d",*(ptr+col));
}
}
}
}
de sortie:
the value is 10
the value is 20
the value is 20
the value is 30
the value is 40
the value is 50
the value is 70
the value is 80
the value is 18
the value is 21
the value is 18
the value is 21
the value is 21
the value is 3
the value is 4
the value is 5
the value is 7
the value is 81
the value is -1074542408
the value is 134513849
ma question est de savoir comment avoir accès aux éléments de la 3-d tableau à l'aide de pointeur sur un tableau et dans mon cas, la sortie montre mon code pas accès aux éléments 90,100,9,11 et comment puis-je accéder à cette dans le code ci-dessus.Merci à l'avance.
OriginalL'auteur tamil_innov | 2013-10-12
Vous devez vous connecter pour publier un commentaire.
Bien que l'aplatissement de tableaux et d'y accéder comme des tableaux 1d est possible, car votre question de départ était de le faire avec des pointeurs vers les dimensions intérieures, voici une réponse qui vous donne des pointeurs à tous les niveaux, à l'aide de la tableau de décomposition du comportement.
De code en ligne des commentaires élaborés avec référence
size_t
à la taille de typesProblèmes dans votre code
Pour la ligne
ptr=p+m;
, GCC jetteassignment from incompatible pointer type
; la raison estp
est de typeint (*)[5][2]
c'est à dire pointeur vers un tableau (taille 5) du tableau (taille 2) d'entiers, qui est affecté àptr
qui est juste un pointeur entier. Intead si vous la changez pourint (*ptr) [5];
et puis neptr = *(p + m);
. C'est ce que mon code (je l'ai nommép
commetable_ptr
), mais seulement qu'il n'utilise pasm
mais il incrémentep
directement.Après cela, au troisième niveau (le plus profond de la boucle), vous avez besoin d'un pointeur entier dire
int *x
(dans mon code c'estcol_ptr
) qui vous feriezint *x = *(ptr + m1)
. Bascially vous avez besoin d'avoir trois pointeurs différents, chacun pour un niveau:int (*) [5][2]
,int (*) [2]
etint *
. J'ai nommétable_ptr
,row_ptr
etcol_ptr
.Vous êtes les bienvenus. Je l'ai découvert récemment, mais il semble très utile, donc je le passe autour de vous 🙂
OriginalL'auteur legends2k
Réécrit votre code ci-dessous et juste utilisé le pointeur
p
pour imprimer tout.pourrait pls point pourquoi mon code ne fonctionne pas.
Formule générale: Combien un pointeur se déplace à venir dépendra de ce type de points de. Votre code:
p=p+m
fonctionné correctement comme p points pour un groupe de 2-d tableau. ptr est justeint*
.ptr=ptr+row
ne fonctionne pas correctement. Essayez de penser à des itérations. À la ligne =0, c'points à 10. À la ligne = 1, il vient de incréments de 1 place (1 place = taille d'un int) à 20 (et Non 2 places) ... et ainsi de suite.J'ai indiqué dans ma réponse, quel est le problème dans votre code.
OriginalL'auteur Siddhartha Ghosh
Vous pouvez facilement accéder à tous les éléments simplement par une boucle à travers
2*5*2 = 20
et à l'aide d'un pointeur vers le premier élément du tableau, j'.e,array[0][0][0]
en supposant 3D tableau 1Darray of arrays of arrays of int
'.J'ai commenté certaines parties de votre code et l'a laissé dans le code modifié pour vous permettre d'effacer ce que j'ai fait.
J'ai édité ma réponse.
Non, le
p
dans votre question n'est pas un pointeur vers un tableau 3D, il est le pointeur vers un tableau 2D. Quand vous avez ditp=array;
, votre tableau 3D pourri pour un pointeur vers son premier élément, qui est précisément le type dep
. Si vous souhaitez un pointeur vers un tableau 3D, vous pouvez le faire avecint (*p)[2][5][2]; p = &array;
. Notez que l'utilisation&array
est l'un de seulement deux contextes où un tableau ne se désintègrent en un pointeur sur son premier élément.OriginalL'auteur haccks
}
Ceci est un exemple de code où les éléments dans un 2X2X2 tableau est accessible à l'aide de pointeurs.
Espérons que cela aide !!!!
OriginalL'auteur Benny Dalby