IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

manipulation de pointeur


Sujet :

C

  1. #21
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Citation Envoyé par Grulim Voir le message
    Attention en C pas de commentaire //
    Je n'aime pas non plus mais c'est bien du C :
    Citation Envoyé par 6.4.9 Comments
    Except within a character constant, a string literal, or a comment, the characters //
    introduce a comment that includes all multibyte characters up to, but not including, the
    next new-line character. The contents of such a comment are examined only to identify
    multibyte characters and to find the terminating new-line character.

  2. #22
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    Voici un petit exemple de ce qui peut être fait.
    J'ai fait ça avec int, mais pour d'autres types (struct) il suffit de quelques adaptations.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    void treat(int* p)
    {
    	printf( "[%p] valeur=%d\n", p, *p );
    }
     
    void algo3()
    {
    	int ii, nb, annul;
    	int** pdebut, ** pfin, ** pcur;
    	int entiers[] = { 10, 20, 30, 40 };
    	const int nb_elements = sizeof(entiers)/sizeof(entiers[0]);
    	int* pointeurs[nb_elements];
     
    	/* init du tableau de pointeurs */
    	for( ii = 0; ii < nb_elements; ++ii )
    	{
    		pointeurs[ii] = &entiers[ii];
    	}
     
    	/* init des bornes du tableau */
    	pdebut = &pointeurs[0];
    	pfin = &pointeurs[nb_elements];
    	pcur = &pointeurs[2];
     
    	annul = 1;
    	nb = 0;
    	printf("DEBUT\n");
    	while( nb < nb_elements )
    	{
    		if( *pcur != NULL )
    		{
    			treat( *pcur );
    			/* raz compteur */
    			nb = 0;
    		}
    		else
    		{
    			/* increment compteur de ptr NULL */
    			++nb;
    		}
     
    		/* avancer sans dépasser la borne de fin */
    		if( ++pcur == pfin )
    		{
    			pcur = pdebut;
    			/* on NULLifie les pointeurs petit à petit */
    			/* pour que la boucle se termine un jour */
    			pointeurs[annul] = NULL;
    			annul = (annul + 1) % nb_elements;
    		}
    	}
    	printf("FIN\n");
    }

  3. #23
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    J'ai opté pour le cas 2 (on parcourt une fois jusqu'à revenir au p_current).
    Comment je peux savoir ce que vaut p_debut?

  4. #24
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    Ok j'ai trouvé comment faire pour le 1er element.
    Par contre j'aimerais parser mon tableua à partir de p_current mais exclu. En gros je voudrais que p_temp ne soit plus egal a p_current mais à p_current incrémenté. Est ce bon?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    int b_fois = 0;
    p_max = p_debut + N;
    p_temp = p_current+1;
    while( b_fois < 1 )
    {
       if (p_temp != NULL)
            treat(p_temp);
     
       /* on avance sans dépasser la borne max */
       if( ++p_temp == p_max )
            p_temp = p_debut;
     
       /* on compte le nombre de fois qu'on passe devant p_current */
       if( p_temp == p_current )
            ++b_fois;
    }

  5. #25
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    C'est pas suffisant :
    Si p_current parcourt l'intervalle [p_debut;p_max[
    alors p_current+1 peut être égale à p_max... et donc dépasser la borne max du tableau !

  6. #26
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    concrêtement il faut que je fasse quoi alors?

  7. #27
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    Faire en sorte que la valeur d'initialisation de p_debut ne puissent pas égaler p_max.
    Une solution inélégante serait de remplacer :
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p_temp = p_current+1 == p_max ? p_debut: p_current+1;
    Je te laisse le soin de trouver une meilleure solution

  8. #28
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    j'ai rajouté la condition suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	  if(p_Current == p_Fin)
    	  	{
    	  		 p_Temp=p_Debut+ 1 ;
    	  	}
    	  else
    	  	{
    	  	  p_Temp=a_hwlpc_Context->p_CurrentSession+ 1 ;
    	  	}
    et ensuite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    while( b_fois < 1 )
    {
       if (p_temp != NULL)
            treat(p_temp);
     
       /* on avance sans dépasser la borne max */
       if( ++p_temp == p_max )
            p_temp = p_debut;
     
       /* on compte le nombre de fois qu'on passe devant p_current */
       if( p_temp == p_current )
            ++b_fois;
    }
    Est ce bon?

  9. #29
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    p_Fin est équivalent à p_max ?
    Si oui, ton test ne sera jamais vérifié puisque p_Current est compris dans l'ensemblre [p_Debut;p_Fin[ (p_Fin est exclu) et donc p_Current ne peut jamais être égal à p_Fin.
    Par contre p_Current + 1, oui !

    Et d'ou vient ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a_hwlpc_Context->p_CurrentSession
    ?
    C'est quoi ?

  10. #30
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    OUPS!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    	  if(p_Current+1 == p_Max)
    	  	{
    	  		 p_Temp=p_Debut+ 1 ;
    	  	}
    	  else
    	  	{
    	  	  p_Temp= p_Current+ 1 ;
    	  	}
    Là est ce bon?

  11. #31
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    ça me semble juste.

  12. #32
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    J'aimerais récupérer l'indice de mon tableau avant ma fonction de treat. Est se possible? sachant que p_debut =a_Tab[0] et p_max=a_Tab[N].
    A savoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    	  if(p_Current+1 == p_Max)
    	  	{
    	  		 p_Temp=p_Debut+ 1 ;
    	  	}
    	  else
    	  	{
    	  	  p_Temp= p_Current+ 1 ;
    	  	}
     
    
    while( b_fois < 1 )
    {
       if (p_temp != NULL)
          { 
            for(int i=0; i<N; i++)
              { 
                 if ( p_Temp ==  a_Tab[i]) 
                           treat(i);
              } 
          }
       /* on avance sans dépasser la borne max */
       if( ++p_temp == p_max )
            p_temp = p_debut;
     
       /* on compte le nombre de fois qu'on passe devant p_current */
       if( p_temp == p_current )
            ++b_fois;
    }

    Est ce bon? Ou y a t'il plus simple.?

  13. #33
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    Il y a plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    index = (p_Temp - p_Debut) / sizeof(p_Debut[0])

Discussions similaires

  1. Manipulation des pointeurs
    Par AQkinkin dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/08/2009, 10h32
  2. Erreur de manipulation de pointeur
    Par Bleys dans le forum Langage
    Réponses: 0
    Dernier message: 05/08/2008, 09h24
  3. comment manipuler le pointeur de la souris
    Par kris1 dans le forum Linux
    Réponses: 9
    Dernier message: 23/11/2007, 15h35
  4. Réponses: 60
    Dernier message: 13/02/2007, 19h53
  5. interface COM / manipulation de pointeurs
    Par slylafone dans le forum C++
    Réponses: 2
    Dernier message: 06/03/2006, 20h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo