Question sur les pointeur et tableau et matrice

Signaler
Messages postés
20
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
19 avril 2006
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
bonjour a tous,
ma question se porte comme indiqué si dessus sur l'utilisation des pointeur avec les tableau et surtout les matrices ou plus.

d'abord j'aimerait savoir s'il est preferable en point de vue de perfermane et optimabilite du code d'utiliser les poiteurs avec ces strucures de donnee en les passants comme arguments dans les fonction (c'etait un exemple) ou non?(comment fait le compilateur enfait?)

ensuite j'aimerait savoir comment vous faite vous les programmeur pour utiliser un pointeur pour acceder a des elements d'une matrice au plus (le cas d'une matrice est suffisant pour comprendre le principe) passé comme argument dans une fonction,y a t-il une syntaxe pour acceder a un element et a la declaration de la fonction et de son prototype ?

merci d'avance et bon courage a tous

3 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
int matrice4x4[4][4];

...

void Matrice4x4_LoadIdentity(int mat[][4])
{
mat[0][0]=1;
...
}

quand tu passe un tableau en parametre, c'est en realite un pointeur (et non son adresse) sur ce tableau qui est passé a la fonction

j'ai pas trop compris ta 2e question, tu aurait un exemple?
Messages postés
20
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
19 avril 2006

merci djl de m'avoir eclairci ceci,

maintenant bien que c'est unitile mais j'aimerait aussi le comprendre , ma deuziemme question etait: si j'utilise maitenant un pointeur comme parmetre pour acceder a la matrice non pas comme tu me l'a montre

void Matrice4x4_LoadIdentity(int mat[][4])
{
mat[0][0]=1;
...
}

mais comme ca

void tableau_loadIdentity( int * tab)
{
*(tab+i)=1; /*pour acceder a la case i*/
/*on peut aussi incrementer le tab directement*/
while ("un condition")
{
//traitement qlq
tab++; //nous fait passer a la case suivante
.
.
.
}

bien sur le tableau devrait etre declare com dab,
mais dans l'appel on ainsi
nomdelafonction(tab); //puisque tab est un pointeur

voila ceci etant pour un tableau maintenant pour une matrice je sait que ca differe une peu et qu'il y a une methode que je trouve pas
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
oui exactement

les elements sont contigue en memoire et tu peux l'utiliser comme un pointeur

tu peut neamoins indexer comme un tableau 2d

void tableau_loadIdentity( int * tab, size_t size, size_t nbCol)
{

// accede a l'element 3,5 par exemple

tab[ 3*nbCol +5 ]=10;
}

si tu ve regarde ma classe tableau 2d, j'ai redefini l'operateur () qui fait exactement la meme chose

http://www.cppfrance.com/code.aspx?ID=22840