les pointeurs - petite aide !

les pointeurs - petite aide ! - C++ - Programmation

Marsh Posté le 03-06-2005 à 11:19:56    

bonjour. comme je l'ai deja di dans un autre post, mes connaissances en C++ sont minimes :/
 
Ma_Struct *mon_pointeur /* ca je comprends ce que c'est !! */
Ma_Struct2 **abcdefgh /* la je ne comprend plus */
 
en tres gros, je dois implementer du code dans un projet existant en utilisant ces 2 variables
 
*mon_pointeur contient les données a traiter (sous forme de tableau) et **abcdefgh est la variable/pointeur (je sais pas trop ce que c'est) que je dois remplir pour transmettre des valeurs.
 
est ce que quelqu'un pourrait m'expliquer ce que represente ces 2 *.
 
merci d'avance !

Reply

Marsh Posté le 03-06-2005 à 11:19:56   

Reply

Marsh Posté le 03-06-2005 à 11:22:03    

un pointeur de pointeur


---------------
http://www.blastmanu.info
Reply

Marsh Posté le 03-06-2005 à 11:22:21    

int *ptr;  // un pointeur vers un int
int **ptr; // un pointeur vers un pointeur vers un int
int ***ptr; // un pointeur vers un pointeur vers un pointeur vers un int
 
etc...


---------------
Friedrich Nietzsche : Le christianisme et l'alcool, les deux plus grands agents de corruption
Reply

Marsh Posté le 03-06-2005 à 11:34:55    

dans mon ex, j'accede tres simplement aux données fournies en faisant comme ceci :
 
mon_pointeur[n] ou n va de 0 au nombre de données differentes fournis -1
 
par contre, mon probleme vient pour remplir la variable de retour. bizarement lorsque je fait :  
 
abcdefgh[0] = 10 ;  /* par ex , cela marche je retrouve bien mon 10 pour la premiere donnée*/
abcdefgh[1] = 20 ; /* je ne retrouve pas le 20 pour la 2° donnée */
abcdefgh[2] = 30 ; /* cela passe a la compilation mais genere une exception pdt l'excution */
 
j'en ai plus ou moin conclus que ca ne marchait pas aussi betement que avec un tableau pourtant cela devrait l'etre tout comme avec la variable d'entrée (provient d'une fonction) *mon_pointeur .
 
ps : je suis pret par mail a discuter de ce probleme pour ne pas pourrir ce forum avec ma "noobitude" :D

Reply

Marsh Posté le 03-06-2005 à 12:05:47    

abcdefgh[1] est un pointeur vers une Ma_Struct2, ça ne peut pas marcher. T'es sûr que c'est pas un tableau bidimensionnel ?


---------------
Friedrich Nietzsche : Le christianisme et l'alcool, les deux plus grands agents de corruption
Reply

Marsh Posté le 03-06-2005 à 12:15:17    

sur ! je peux pas te dire ! ce que je sais c'est que j'ai en effet tester comme ceci :
 
abcdefgh[0][0] /* par exemple, mais cela pose probleme a la compilation */
 
voici la structure :
 
typedef struct OrderItemResponseInq3_IDL {
 long positionItem;
 long soPositionItem;
 Amount_IDL price1;
 Amount_IDL price2;
 PriceMode_IDL priceMode;
 double quantity;
 double quantityATP;
 BSTR shortText;
 BSTR salesUnit;
 Material2_IDL alternativeMaterial;
 BSTR shortTextAM;
 BSTR manufacturerAM;
 BSTR usedMaterial;
 long inqStatus;
 long procStatus;
 long messageCode;
 BSTR responsePar1;
 BSTR responsePar2;
} OrderItemResponseInq3_IDL;
 
voila la fonction a programmer, du moins les paramatres en entrée et en sortie :
 
long processInquiry ( OrderHeaderInfo3 orderHeader,
            UserData supplierAddress,
            UserData customerAddress,
            long requestType,
            long checkAvailability,  
            long itemCount,  
            OrderItem3 *orderItem,  
            OrderItemResponseInq3 **orderItemResp,  
            OrderResult2 *orderResult)
 
**orderItemResp et *orderResult sont les deux parametres de retour.


Message édité par srs le 03-06-2005 à 12:16:19
Reply

Marsh Posté le 03-06-2005 à 16:40:25    

srs a écrit :

sur ! je peux pas te dire ! ce que je sais c'est que j'ai en effet tester comme ceci :
 
abcdefgh[0][0] /* par exemple, mais cela pose probleme a la compilation */
 
voici la structure :
 
typedef struct OrderItemResponseInq3_IDL {
 long positionItem;
 long soPositionItem;
 Amount_IDL price1;
 Amount_IDL price2;
 PriceMode_IDL priceMode;
 double quantity;
 double quantityATP;
 BSTR shortText;
 BSTR salesUnit;
 Material2_IDL alternativeMaterial;
 BSTR shortTextAM;
 BSTR manufacturerAM;
 BSTR usedMaterial;
 long inqStatus;
 long procStatus;
 long messageCode;
 BSTR responsePar1;
 BSTR responsePar2;
} OrderItemResponseInq3_IDL;
 
voila la fonction a programmer, du moins les paramatres en entrée et en sortie :
 
long processInquiry ( OrderHeaderInfo3 orderHeader,
            UserData supplierAddress,
            UserData customerAddress,
            long requestType,
            long checkAvailability,  
            long itemCount,  
            OrderItem3 *orderItem,  
            OrderItemResponseInq3 **orderItemResp,  
            OrderResult2 *orderResult)
 
**orderItemResp et *orderResult sont les deux parametres de retour.


 
 
 
et comme ça c'est plus claire ?
 
 
 
 
#include <stdio.h>
#include <stdlib.h>
 
typedef struct  
{
 int val01;
 int val02;
}myStruct;
 
 
 
 
int callStruct(myStruct **pStruct)
{
 myStruct *pStructVal;
 
 pStructVal = *pStruct;
 
 if(pStructVal != NULL)
 {
 printf("Val1 : %d \tVal2 : %d \n", pStructVal->val01, pStructVal->val02);
 }
 return 0;
}
 
 
int callTest(void)
{
myStruct test;
myStruct* pDatatest;
 
pDatatest = &test;
 
 
test.val01 = 10;
test.val02 = 20;
callStruct(&pDatatest);
return 0;
}


Message édité par Fan-DvdRam le 03-06-2005 à 16:43:49
Reply

Marsh Posté le 06-06-2005 à 11:11:40    

j'ai trouver la soluce.
 
en me prennant la tete un peu, j'ai chercher comment ils lisaient cette variable a la fin de la fonction et le resultat est :  
 
(*orderItemResp)[n] /* ou n varie suivant le nombre de ligne */
 
jvous remercie a tous pour les soluces et vous souhaite une bien belle journée !!!
 

Reply

Sujets relatifs:

Leave a Replay

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