Differentes facons de passer un pointeur.....

Differentes facons de passer un pointeur..... - C++ - Programmation

Marsh Posté le 06-07-2006 à 18:17:29    

Bonjour a tous,
 
Je suis relativement nouveau dans le language C++. J'ai recemment lu un article sur gamdev.net:
 
http://www.gamedev.net/reference/p [...] /page2.asp
 
Un des exemple est le suivant:
 

Code :
  1. float m_fvMatrix[4][4];
  2. [...];
  3. glLoadMatrix( (float*)m_fvMatrix );


 
La signature de la fonction glLoadMatrix etant:
 

Code :
  1. void glLoadMatrixd(GLdouble *m)
  2. void glLoadMatrixf(GLfloat *m)


 
http://www.mevis.de/opengl/glLoadMatrix.html
 
Je me demandais si la ligne :
 

Code :
  1. glLoadMatrix( (float*)m_fvMatrix );


 
pouvait en fait s'ecrire:
 

Code :
  1. glLoadMatrix( m_fvMatrix );


 
En esperant ne pas me faire incendier si c'est une question bete:  
 
Merci ;) !
 
 

Reply

Marsh Posté le 06-07-2006 à 18:17:29   

Reply

Marsh Posté le 06-07-2006 à 20:19:06    

un tableau (l'identifieur) designe l'adresse de sont premier element et un tableau multidimensionnel est un tableau de tableau, donc le type d'un element de 'float [4][4]' est 'float [4]' et l'adresse d'un tableau 'float [4][4]' est typée 'float (*)[4]'
 
si tu as

Code :
  1. float m_fvMatrix[4][4];


 
tu peux faire

Code :
  1. float (*p)[4] = m_fvMatrix;


 
par contre pour affecter à un 'float *' le cast s'impose car le typage differe, apres c'est a toi de savoir ce que tu fais. glLoadMatrixf attends un pointeur vers une zone memoire représentant 16 float consecutif donc ca ne pose pas de problemes car ca correspond bien a "l'image memoire" d'un 'float [4][4]'

Reply

Marsh Posté le 06-07-2006 à 20:21:36    

apres bon std::vector quoi :o

Reply

Marsh Posté le 06-07-2006 à 20:24:08    

je penses qu'il ya mieux pour une matrice 4x4, voir du coté des bibliotheques mathématiques

Reply

Marsh Posté le 06-07-2006 à 20:28:04    

fixed_array dans boost je crosi ou blitz++ ou ma sig :p

Reply

Marsh Posté le 06-07-2006 à 20:38:13    

ouai, dans boost c'est dans la bibliotheque uBlas

Reply

Marsh Posté le 06-07-2006 à 21:18:59    

skelter a écrit :

un tableau (l'identifieur) designe l'adresse de sont premier element et un tableau multidimensionnel est un tableau de tableau, donc le type d'un element de 'float [4][4]' est 'float [4]' et l'adresse d'un tableau 'float [4][4]' est typée 'float (*)[4]'
 
si tu as

Code :
  1. float m_fvMatrix[4][4];


 
tu peux faire

Code :
  1. float (*p)[4] = m_fvMatrix;


 
par contre pour affecter à un 'float *' le cast s'impose car le typage differe, apres c'est a toi de savoir ce que tu fais. glLoadMatrixf attends un pointeur vers une zone memoire représentant 16 float consecutif donc ca ne pose pas de problemes car ca correspond bien a "l'image memoire" d'un 'float [4][4]'


 
Merci shelter pour cette reponse qui m'aide beaucoup.
 
Si j'ai compris:
 
m_fvMatrix est un pointeur de type float (*p)[4] quand declare selon mon premier quote.
Mais ma fonction openGL attend un float (*p), d'ou le cast.

Reply

Marsh Posté le 06-07-2006 à 21:35:32    

oui, mais m_fvMatrix n'est pas exactement un pointeur mais une adresse (contenant <-> contenu) qui peut etre contenue par un pointeur float (*p)[4]
comme l'adresse d'une variable elle n'est pas modifiable, par exemple tu ne peux pas faire m_fvMatrix++ (alors qu'avec un pointeur non constant tu pourrais)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed