Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

Passer un pointeur dans les parametres d'une

dali81, le dimanche 24 avril 2005 à 18:57:36 
 Signaler ce message aux modérateurs

Salut,

j'ai ecrit une fonction f qui retourne un pointeur p1

elle calcule aussi un autre pointeur p2

comment je pourrais avoir p2 dans main??

1

crabs, le dimanche 24 avril 2005 à 21:10:22

Salut
c'est quel langage ? 4 chance sur 5 que ça doit être du C ou du C++
On va partir du principe que les pointeurs sont typés void.
tu ecrit donc ta foncton f de cette manière :

int f( void** p1, void** p2, [les autres arguments] )
   {
    /* tous les traitements */
    *p1 = la_valeur_de_P1 ;
    *p2 = la_valeur_de_P2 ;
    return le_compte_rendu ;
    }

/* Le main */
int main( int argc, char **argv )
    {
    void *p1, *p2 ;
    int ret ;
     ...
    ret = f( &p1, &p2, ..., ... ) ;
     ...
    return 0 ;
    }

Les pointeurs c'est comme les autres arguments, quand on veut les
modifier dans une fonction, on passe leurs adresses à la fonction. ..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

2

dali81, le lundi 25 avril 2005 à 14:27:59

merci pour votre reponse, mais j'ai essayé et ça marche toujours pas, voici la fonction et main


unsigned int sRWA(float *matrice, unsigned int D, unsigned int columns, unsigned int W, unsigned int U, unsigned int K,
LIGHTPATH *spra, unsigned int spraFILE_LENGTH, edge *TOPOLOGY, arc *GRAPH, unsigned int TOPOLOGYLENGTH,
unsigned int FLAG, unsigned int *sRWArejectedLDs, unsigned int *sRWArequiredWDMCH,unsigned int** routedLIGHTPATHdemands)
{
unsigned int i=0;
unsigned int j=0;
unsigned int p=0;
unsigned int q=0;
unsigned int u=0;
unsigned int l=0;
unsigned int m=0;
unsigned int v=0;
unsigned short int drapeau=0;
unsigned short int commonLINK=0;
unsigned int MAXrouteLENGTH=0;
unsigned int routedLIGHTPATHdemandsLENGTH=0;
unsigned int *rejectedLightpathDemands=0;
unsigned int rejectedLightpathDemandsLENGTH=0;

*sRWArequiredWDMCH=0;


for (v=0;v<spraFILE_LENGTH;v++)
{
for(q=0;q<W;q++)
*((spra+v)->cost+q) = 0;
}

for (p=0; p<spraFILE_LENGTH; p++)
{
if ((spra+p)->LENGTH > MAXrouteLENGTH)
{
MAXrouteLENGTH = (spra+p)->LENGTH;
}
}

rejectedLightpathDemands = (unsigned int *) calloc(D, sizeof(unsigned int));
if (rejectedLightpathDemands == NULL)
{
printf("impossible d'allouer de la memoire pour rejectedLightpathDemands");
exit(1);
}


routedLIGHTPATHdemands = (unsigned int **) calloc((3*D), sizeof(unsigned int));
if (routedLIGHTPATHdemands == NULL)
{
printf("impossible d'allouer de la memoire pour routedLIGHTPATHdemands");
exit(1);
}

for (i=0;i<D;i++)
{
p=0;
q=0;
j=0;
drapeau=0;
while ((p<spraFILE_LENGTH) && (drapeau == 0))
{
if (((unsigned int) *(matrice+i*columns+2) == (spra+p)->origin) && ((unsigned int) *(matrice+i*columns+3) == (spra+p)->destination))
{
q=0;
j=j+1;
while ((q<W) && (drapeau == 0))
{
if (*((spra+p)->cost+q) < FLAG)
{
drapeau = 1;
*((spra+p)->cost+q) = FLAG;

u=0;
while (u<spraFILE_LENGTH)
{
commonLINK = commonLINKpaths((spra+p)->route, (spra+p)->LENGTH, (spra+u)->route, (spra+u)->LENGTH);

if (commonLINK >= 1)
{
*((spra+u)->cost+q) = FLAG;
}
u=u+1;
}
// GRAPH = updateGRAPH((spra+p)->route, (spra+p)->LENGTH, (unsigned int) *(matrice+i*columns+0), 1, W, U, TOPOLOGYLENGTH, GRAPH, q);
*(routedLIGHTPATHdemands+routedLIGHTPATHdemandsLENGTH) = (unsigned int) *(matrice+i*columns+0);
routedLIGHTPATHdemandsLENGTH = routedLIGHTPATHdemandsLENGTH + 1;
*(routedLIGHTPATHdemands+routedLIGHTPATHdemandsLENGTH) = p;
routedLIGHTPATHdemandsLENGTH = routedLIGHTPATHdemandsLENGTH + 1;
*(routedLIGHTPATHdemands+routedLIGHTPATHdemandsLENGTH) = q;
routedLIGHTPATHdemandsLENGTH = routedLIGHTPATHdemandsLENGTH + 1;

*sRWArequiredWDMCH = *sRWArequiredWDMCH+(spra+p)->LENGTH-1;



}
q = q+1;
}
if ((drapeau == 0) && (j == (spra+p)->exist))
{

*(rejectedLightpathDemands+rejectedLightpathDemandsLENGTH) = (unsigned int) *(matrice+i*columns+0);
rejectedLightpathDemandsLENGTH = rejectedLightpathDemandsLENGTH + 1;

}



}
p=p+1;

}

}


free(rejectedLightpathDemands);
rejectedLightpathDemands = NULL;





return rejectedLightpathDemandsLENGTH;
}







/***************************************************************************
main.c - description


#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <rngs.h>
#include <rvgs.h>
#include <time.h>
#include <clprs.h>
#include <ctype.h>
#include <spra.h>
#include <utils.h>
#include <ts.h>
#include <routing.h>



#define columns 8
#define MAXunsignedINT 65535
#define nbreITERATIONS 1
#define epsilon 0.00001
#define U 1


int main(int argc, char *argv[])
{
unsigned int TOPOLOGYLENGTH=0;
unsigned int spraFILE_LENGTH=0;
LIGHTPATH *spra = NULL;
unsigned int N;
unsigned int D;
unsigned int W;
unsigned int K;
unsigned int mu;
unsigned int nu;
unsigned int L;
unsigned int k=0;
// unsigned int q=0;
unsigned int tailleNEIGHBERHOOD;
unsigned int tailleTABUList;
unsigned int rows;
unsigned int i=0;
unsigned int n=0;
unsigned int rlpdmin=10000;
unsigned int rwdm=10000;
unsigned int *routedLIGHTPATHdemands;



double sreroutingrejectedrequiredLightpathsratio=0;
//double rejectedLightpathDemandsLENGTH ;
// time_t t0, t1;
float *matrice;
float *MatriceOptimale;
edge *TOPOLOGY;
arc *GRAPH;
;
unsigned int numberofSLDs=0;
unsigned int numberofRLDs=0;
//unsigned int sRWArejectedLDss;
unsigned int sRWArejectedLDs;
unsigned int sRWArequiredWDMCH;
//unsigned int sRWAexecutionTime;
// unsigned int *routeNODES;



// routedLIGHTPATHdemands = (unsigned int *) calloc((3*D), sizeof(int));

if (argc != 13)
{
ERRORmessage(argv[0]);
}
N = atoi(argv[1]);
D = atoi(argv[2]);
W = atoi(argv[4]);
K = atoi(argv[5]);
mu = atoi(argv[6]);
nu = atoi(argv[7]);
L = atoi(argv[8]);
tailleNEIGHBERHOOD = atoi(argv[9]);
tailleTABUList = atoi(argv[10]);


TOPOLOGYLENGTH = TOPOFILE_LENGTH(argv[11]);
TOPOLOGY = LoadGRAPHTop(argv[11], W);
GRAPH = LoadGRAPH(argv[11], W, U);

spra = spraFILE(argv[12], &spraFILE_LENGTH, W);


rows = 2*D;
matrice = Loadtraffic(argv[3], rows, columns);


matrice = generate_action_matrix(matrice,D ,columns);
matrice = ordreSLDtrafficdemands(matrice,D, columns);



sreroutingrejectedrequiredLightpathsratio=0;
for (i=0; i<D; i++)
{

if (((unsigned int) *(matrice+i*columns+5) == 0) && (*(matrice+i*columns+1) == 1))
{
numberofSLDs = numberofSLDs + 1;
}
else if (((unsigned int) *(matrice+i*columns+5) == 0) && (*(matrice+i*columns+1) == 0))
{
numberofRLDs = numberofRLDs + 1;
}
sreroutingrejectedrequiredLightpathsratio = sreroutingrejectedrequiredLightpathsratio + (unsigned int) *(matrice+i*columns+4);
}



MatriceOptimale=(int*)malloc(D*columns*sizeof(int));



for(n=0;n<100;n++)
{
vectaleatoire(matrice,columns,D);


sRWArejectedLDs = sRWA(matrice, D, columns, W, U, K, spra, spraFILE_LENGTH, TOPOLOGY, GRAPH, TOPOLOGYLENGTH, MAXunsignedINT, &sRWArejectedLDs, &sRWArequiredWDMCH, &routedLIGHTPATHdemands);



if(sRWArejectedLDs<rlpdmin)
{
rlpdmin=sRWArejectedLDs;
rwdm=sRWArequiredWDMCH;
for(k=0;k<(D*columns);k++)

*(MatriceOptimale+k)=*(matrice+k);
}

if(sRWArejectedLDs==rlpdmin)
{
if(sRWArequiredWDMCH<rwdm)
{
rwdm=sRWArequiredWDMCH;
for(k=0;k<(D*columns);k++)
*(MatriceOptimale+k)=*(matrice+k);
}
}

}

sRWArejectedLDs = sRWA(MatriceOptimale, D, columns, W, U, K, spra, spraFILE_LENGTH, TOPOLOGY, GRAPH, TOPOLOGYLENGTH, MAXunsignedINT, &sRWArejectedLDs, &sRWArequiredWDMCH, &routedLIGHTPATHdemands);

printf( "%u\t%u\t", sRWArejectedLDs, sRWArequiredWDMCH);


printf("%u\t",*(routedLIGHTPATHdemands));









free(matrice);
matrice = NULL;
free(GRAPH);
GRAPH = NULL;
free(TOPOLOGY);
TOPOLOGY = NULL;
free(spra);
spra = NULL;

return EXIT_SUCCESS;
}

Répondre à dali81

3

dali81, le lundi 25 avril 2005 à 14:29:43

Donc la le pointeur calculé dans la fonction sRWA et dont j'ai besoin dans main c'est
*routedLIGHTPATHdemans

Répondre à dali81

4

kij_82, le lundi 25 avril 2005 à 14:30:04

Sql mais j'met pas le nez la dedans... ~ iclic @ gauch,iclic,  iclic @ droate, iclic, iclic
             et ya pas de bôg môsieu !    ~

Répondre à kij_82

5

 crabs, le lundi 25 avril 2005 à 17:36:11

Je suis pas sur que tu ais bien vu le bout code que je donne.
Dans le corps de la fonction si tu veux modifier la valeur du pointeur
il faut utiliser la notation *p. Dans ton source tu continues à utiliser
p en modifiant en plus le type du calloc(), certainement pour éviter
un warning ou une erreur de compil...
Au vue de ce que tu codes, fait des exemples simples de manip des
pointeurs en langage C. ..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs
[Programmation] Conventions de passage de paramètres sous x86 Les conventions de passage de paramètres sous x86 Introduction Cdecl Stdcall Fastcall Register Pascal Sources de ce document et liens Lorsqu'un programme est compilé pour une architecture x86, le passage de paramètres pour... www.commentcamarche.net/faq/sujet-4874-programmation-conventions-de-passage-de-parametres-sous-x86
[VB / VBA] Passer un parametre a une macro (Résolu) Bonjour a tous, je suis debutant en VB / VBA et je me retrouve face a un petit probleme pour passer un parametre a une macro dans un fichier Word a partir d'une application en VB. Plus clairement, j'ai developpé une application en VB qui ouvre un... www.commentcamarche.net/forum/affich-2273346-vb-vba-passer-un-parametre-a-une-macro
Access : Passer un paramètre à formulaire Bonjour à tous Voila, je suis actuellement en stage et je développe actuellement une application sous access et vba... J'aimerai passer un paramètre à un formulaire en passant vba... Ex : DoCmd.OpenForm, etc... ou d'une autre manière... Je suis... www.commentcamarche.net/forum/affich-239552-access-passer-un-parametre-a-formulaire
Paramètres GPRSSi vous possédez un téléphone mobile fonctionnant sous Windows Mobile (smartphone du type HTC, Qtek, etc.), voici les paramètres GPRS pour les trois principaux opérateurs français Orange Orange GSM Orange GPRS Orange MMS Orange... www.commentcamarche.net/faq/sujet-7324-parametres-gprs
Mot de passe perdu - Réinitialiser le BIOSSi vous avez oublié ou perdu le mot de passe du BIOS, demandé dès le démarrage de l'ordinateur, cette page vous donne, entre autres, la méthode pour supprimer la demande de mot de passe au tout démarrage du PC (ne pas confondre avec le mot de passe... www.commentcamarche.net/faq/sujet-587-mot-de-passe-perdu-reinitialiser-le-bios
[Windows XP] Points de restauration1 - Points de restauration et données personnelles 2 - Vérifier le service 3 - Paramétrer les partitions à restaurer 4 - Remarque 5 - Taille de la sauvegarde et nettoyage 6 - Créer un point de restauration 7 - Restaurer un point de... www.commentcamarche.net/faq/sujet-740-windows-xp-points-de-restauration
PHP comment passer des paramètresBonjour, question peut être simple mais je n'ai psa trouvée de solution encore. En javascript, on peut passer des paramètres de manière très propres grâce à {}, par exemple en ajax : new Ajax.Updater('items', '/items', { parameters: { text: $F('text')... www.commentcamarche.net/forum/affich-10404395-php-comment-passer-des-parametres
VB passage de paramètreBonjour, je cherche comment passer un paramètre à mon programme en VB lors de son ouverture (en mode commande). Exemple : notepad.exe %1 Comment je fais pour attraper cette valeur dans mon programme lors de son ouverture? Merci, Fred www.commentcamarche.net/forum/affich-874338-vb-passage-de-parametre
[MatLab]Passage de parametres en GUIBonjour Comment on fait du passage de parametre entre fonctions evenementielles? Je m'explique, j'ouvre une image avec imread. je l'affiche sur un axe dès que je coche sur une case, je veux que l'image s'affiche sur l'autre case. mais ca me dit... www.commentcamarche.net/forum/affich-2426441-matlab-passage-de-parametres-en-gui
Télécharger PowerPoint Password RecoveryPowerPoint Password Recovery est un programme qui, comme son nom le suggère, permet de récupérer un mot de passe perdu ou oublié d’un fichier Powerpoint. Cette application est particulièrement intéressante surtout si vous avez égaré le mot de passe... www.commentcamarche.net/telecharger/telecharger-34059711-powerpoint-password-recovery
Télécharger Pointstone Internet AcceleratorPour une bonne connexion Internet, prenez soin de bien configurer vos paramètres Internet. Pointstone Internet Accelerator est un outil destiné à accélérer votre raccordement Internet par modification votre configuration qui affectent directement la... www.commentcamarche.net/telecharger/telecharger-34058684-pointstone-internet-accelerator
D-Link AirPlus Xtreme G Wireless Access PointSupport IEEE 802.11b, Data Link Protocole:IEEE 802.11b, IEEE 802.11g, Type de clôture:Externe, Type:Wireless Access Point, Normes conciliantes:IEEE 802.3, IEEE 802.3U, IEEE 802.11b, IEEE 802.11g, IEEE 802.1x, Vitesse max du réseau sans fil:54 Mbps, Portes www.commentcamarche.net/guide/540507-d-link-airplus-xtreme-g-wireless-access-point
Langage C++ - Les pointeursComme en langage C, le langage C++ permet d'utiliser des pointeurs pour manipuler des données, mais il introduit aussi le concept de référence, très pratique pour permettre la modification d'une donnée passée en paramètre d'une fonction. Définition... www.commentcamarche.net/contents/cpp/cpppoint.php3