Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1738 connectés 

  FORUM HardWare.fr
  Programmation
  C

  "pointeur +1" pointe l'élément suivant ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

"pointeur +1" pointe l'élément suivant ?

n°1185993
NounouRs
Non parce que c pas mon pied !
Posté le 27-08-2005 à 19:11:33  profilanswer
 

c'est extrait d'un code C que j'ai retranscrit en C++, mais sur ce point la je doute
 
Un pointeur auquel au fait p+1    est ce qu'il pointe sur l'element suivant dans la structure (structure PIXEL)
 

Code :
  1. PIXEL* p = this->adr ;
  2.   for (int i=0; i<h ; i++)
  3.   {
  4.     p+=l;
  5.     this->tab[i]= p ;
  6.   }

mood
Publicité
Posté le 27-08-2005 à 19:11:33  profilanswer
 

n°1185996
KangOl
Profil : pointeur
Posté le 27-08-2005 à 19:15:32  profilanswer
 

euh ... non


---------------
Nos estans firs di nosse pitite patreye...
n°1185997
masklinn
í dag viðrar vel til loftárása
Posté le 27-08-2005 à 19:15:55  profilanswer
 

[:gratgrat]
 
Faut demander à Emmanuel, mais je pense pas, +1 ça va incrémenter le pointeur genre d'un octet unique, donc ça dépend de la taille des éléments de la structure...
 
Et je sais plus si tous les éléments d'une structure sont stockés de manière contigue


Message édité par masklinn le 27-08-2005 à 19:16:28

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1185998
chagarou
Posté le 27-08-2005 à 19:16:50  profilanswer
 

Non, il ingremente le pointeur de sizeof(PIXEL).
Donc apres p +=1, p pointera sur la prochaine structure PIXEL.


Message édité par chagarou le 27-08-2005 à 19:17:12
n°1186000
masklinn
í dag viðrar vel til loftárása
Posté le 27-08-2005 à 19:18:18  profilanswer
 

chagarou a écrit :

Non, il ingremente le pointeur de sizeof(PIXEL).
Donc apres p +=1, p pointera sur la prochaine structure PIXEL.


sûr?
(et il pointera sur ce qu'il y a juste après la structure PIXEL actuelle, c'est pas nécessairement une structure PIXEL :o)


Message édité par masklinn le 27-08-2005 à 19:18:58

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1186001
NounouRs
Non parce que c pas mon pied !
Posté le 27-08-2005 à 19:18:50  profilanswer
 

masklinn a écrit :

[:gratgrat]
 
Faut demander à Emmanuel, mais je pense pas, +1 ça va incrémenter le pointeur genre d'un octet unique, donc ça dépend de la taille des éléments de la structure...
 
Et je sais plus si tous les éléments d'une structure sont stockés de manière contigue


 
 
C'est exactement les questions que je me posais....
 
Bon, premier point les elements sont des OCTETS ce qui correspond au +1.
( donc question subsidière : comment faire si ce ne sont pas des octets)
 
Et pour ce qui est de la continuité, c'est vraiment un coup de bol si ca marche... avec une centaine d'elements, OK mais plus ????
 
Comment on fait pour obtenir le "pointeur suivant" ?   fonction spéciale ?

n°1186003
jesus_chri​st
votre nouveau dieu
Posté le 27-08-2005 à 19:19:06  profilanswer
 

pour tout pointeur p de type autre que void*, p + 1 pointe vers l'élément suivant dans un tableau (ou un vector en C++, mais c'est crade).
 
Par exemple :
 
[cpp]int* tab;
tab = new int[42];
 
int* p = &(tab[20]); // p pointe vers le 21e entier
p = p + 1; // p pointe vers le 22e entier
 
Ici tu semble avoir un tableau de PIXEL, donc c'est bon
Attention dans ta boucle tu commence à p + 1, je crois que t'as inversé les deux lignes.

n°1186004
chagarou
Posté le 27-08-2005 à 19:19:23  profilanswer
 

masklinn a écrit :


sûr?  
(et il pointera sur ce qu'il y a juste après la structure PIXEL actuelle, c'est pas nécessairement une structure PIXEL :o)


Puisque que la quote a changer, le commentaire aussi :p
Sodomiseur de diptère :o


Message édité par chagarou le 27-08-2005 à 19:22:20
n°1186005
KangOl
Profil : pointeur
Posté le 27-08-2005 à 19:19:25  profilanswer
 

chagarou a écrit :

Non, il ingremente le pointeur de sizeof(PIXEL).
Donc apres p +=1, p pointera sur la prochaine structure PIXEL.


j'ai des doute...
je sais que l'opérateur ++ le fait mais le += me laisse perplexe


---------------
Nos estans firs di nosse pitite patreye...
n°1186007
NounouRs
Non parce que c pas mon pied !
Posté le 27-08-2005 à 19:19:53  profilanswer
 

chagarou a écrit :

Non, il ingremente le pointeur de sizeof(PIXEL).
Donc apres p +=1, p pointera sur la prochaine structure PIXEL.


 
 
Si ca avait été  TABLEAU_HYPER_GROS
il aurai incrementé de    sizeof(TABLEAU_HYPER_GROS) ???

mood
Publicité
Posté le 27-08-2005 à 19:19:53  profilanswer
 

n°1186008
jesus_chri​st
votre nouveau dieu
Posté le 27-08-2005 à 19:20:10  profilanswer
 

oui
 
type* p;
 
p + 1 == "adresse p" + sizeof(type)


Message édité par jesus_christ le 27-08-2005 à 19:21:11
n°1186009
masklinn
í dag viðrar vel til loftárása
Posté le 27-08-2005 à 19:20:44  profilanswer
 

Tiens, va voir la page d'Emmanuel, tu trouveras sûrement tout ce qu'il te faut sur les structures et les pointeurs ;)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1186019
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-08-2005 à 20:08:21  profilanswer
 

NounouRs a écrit :

c'est extrait d'un code C que j'ai retranscrit en C++, mais sur ce point la je doute
 
Un pointeur auquel au fait p+1    est ce qu'il pointe sur l'element suivant dans la structure (structure PIXEL)
 

Code :
  1. PIXEL* p = this->adr ;
  2.   for (int i=0; i<h ; i++)
  3.   {
  4.     p+=l;
  5.     this->tab[i]= p ;
  6.   }



Le pointeur étant de type PIXEL, il sera augmenté de sizeof(PIXEL) à chaque tour. Autrement dit, si this->addr est l'adresse d'un tableau de PIXEL, on pointera sur chaque PIXEL en séquence (this->addr[0], this->addr[1] etc.)
 
L'arithmétique des pointeurs, c'est la base du C...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1186020
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-08-2005 à 20:09:16  profilanswer
 

masklinn a écrit :

[:gratgrat]Faut demander à Emmanuel,


Je ne suis heureusement pas le seul à savoir répondre à ça...

Citation :

+1 ça va incrémenter le pointeur genre d'un octet unique,


Ben non... Ca va pointer à sizeof (T) bytes plus loin...
 
C'est le moment de relire son livre de C...


Message édité par Emmanuel Delahaye le 27-08-2005 à 20:11:59

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1186021
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-08-2005 à 20:10:01  profilanswer
 

masklinn a écrit :

sûr?
(et il pointera sur ce qu'il y a juste après la structure PIXEL actuelle, c'est pas nécessairement une structure PIXEL :o)


Ca c'est un autre problème. Le C n'est pas protégé contre ça.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1186025
masklinn
í dag viðrar vel til loftárása
Posté le 27-08-2005 à 20:12:34  profilanswer
 

Emmanuel Delahaye a écrit :

Je ne suis heureusement pas le seul à savoir répondre à ça...


Oui mais vu tes connaissances peu ou prou encyclopédique en C, si tu réponds on est à peu près sûr que la réponse sera correcte, et que les corner case seront mentionnés ;)

n°1186028
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-08-2005 à 20:13:38  profilanswer
 

jesus_christ a écrit :

pour tout pointeur p de type autre que void*, p + 1 pointe vers l'élément suivant dans un tableau


Oui.

Citation :

int* tab;
tab = new int[42];




Pas du C. Dommage...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1186029
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-08-2005 à 20:14:52  profilanswer
 

KangOl a écrit :

j'ai des doute...
je sais que l'opérateur ++ le fait mais le += me laisse perplexe


Et c'est quoi la différence entre p++ et p += 1 ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1186031
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-08-2005 à 20:16:17  profilanswer
 

NounouRs a écrit :

Si ca avait été  TABLEAU_HYPER_GROS
il aurai incrementé de    sizeof(TABLEAU_HYPER_GROS) ???


Si tu veux dire TYPE_HYPER_GROS, ben oui.
 
Je ne comprends pas. Cette notion est élémentaire en C...


#include <stdio.h>
 
int main (void)
{
   struct test
   {
      char s[0x10];
   };
 
   struct test x;
   struct test *p = &x;
 
   printf ("sizeof (struct test) = %X bytes (hexa)\n"
           ,(unsigned) sizeof (struct test));
 
   printf ("p = %p\n", (void *) p);
 
   p++;
 
   printf ("p = %p\n", (void *) p);
 
   p += 1;
 
   printf ("p = %p\n", (void *) p);
 
   ++p;
 
   printf ("p = %p\n", (void *) p);
 
   return 0;
}


on voit bien que l'adresse augmente de 10 en 10 (hexa) :  


sizeof (struct test) = 10 bytes (hexa)
p = 0073FDA0
p = 0073FDB0
p = 0073FDC0
p = 0073FDD0



Message édité par Emmanuel Delahaye le 27-08-2005 à 20:36:32

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1186042
KangOl
Profil : pointeur
Posté le 27-08-2005 à 20:26:21  profilanswer
 

Emmanuel Delahaye a écrit :

Et c'est quoi la différence entre p++ et p += 1 ?


p++ va créé un nouvel "objet"
p+=1 correspond plus à ++p ...
 
 
 
 
 
 
 
 
bon ok je chipote mais c'était pour avoir quelque chose à répondre  [:kangol]


---------------
Nos estans firs di nosse pitite patreye...
n°1186052
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-08-2005 à 20:31:47  profilanswer
 

KangOl a écrit :

p++ va créé un nouvel "objet"


Quoi ? Quel nouvel objet ? La valeur du pointeur va être augmentée de la taille de l'objet, et il va donc pointer sur l'objet suivant (qu'il existe ou non n'est pas le problème du pointeur, qui peut pointer n'importe où). Il n'y a aucune 'création' d'objet. Je n'ai pas vu d'allocation mémoire.

Citation :

p+=1 correspond plus à ++p ...


p++, p+=1 et ++p sont strictement identiques (tant qu'ils sont utilisés seuls).


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1186054
KangOl
Profil : pointeur
Posté le 27-08-2005 à 20:34:55  profilanswer
 

j'ai dit que c'etait pour chipoter :o
 
(et puis c'est vrai qu'en c le terme "objet" ne veux rien dire...)


---------------
Nos estans firs di nosse pitite patreye...
n°1186058
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-08-2005 à 20:38:10  profilanswer
 

KangOl a écrit :

(et puis c'est vrai qu'en c le terme "objet" ne veux rien dire...)


Si. Un objet, c'est un entitée qui a une adresse, une taille et une valeur. Ca s'appelle aussi une variable.


Message édité par Emmanuel Delahaye le 27-08-2005 à 20:43:17

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1186061
KangOl
Profil : pointeur
Posté le 27-08-2005 à 20:39:55  profilanswer
 

note pour moi meme : emmanuelle a toujours quelque chose a répondre (et toujours juste)


---------------
Nos estans firs di nosse pitite patreye...
n°1186062
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-08-2005 à 20:44:06  profilanswer
 

KangOl a écrit :

note pour moi meme : emmanuelle a toujours quelque chose a répondre (et toujours juste)


Tant qu'il y a des imprécisions ou des erreurs, oui. Par exemple, c'est Emmanuel et non emmanuelle... Rêve pas !


Message édité par Emmanuel Delahaye le 27-08-2005 à 20:44:40

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1186066
KangOl
Profil : pointeur
Posté le 27-08-2005 à 20:52:29  profilanswer
 

http://www.meskweek.net/html/emoticons/meske00441.gif


---------------
Nos estans firs di nosse pitite patreye...
n°1186216
el muchach​o
Comfortably Numb
Posté le 28-08-2005 à 10:11:26  profilanswer
 

KangOl a écrit :

j'ai dit que c'etait pour chipoter :o
 
(et puis c'est vrai qu'en c le terme "objet" ne veux rien dire...)


 
Ouais enfin là, tu aurais quand même mieux fait de te taire. On fait pas du Perl, là.
 
(et comme l'a fait remarquer ED, l'arithmétique des pointeurs, c'est la base en C)


Message édité par el muchacho le 28-08-2005 à 10:13:24
n°1186479
jesus_chri​st
votre nouveau dieu
Posté le 28-08-2005 à 19:17:14  profilanswer
 

Citation :

int* tab;
tab = new int[42];




Pas du C. Dommage...
 
c'est vrai mais nounours a dit :

Citation :

c'est extrait d'un code C que j'ai retranscrit en C++, mais sur ce point la je doute


et dans son code il y a un this->adr qui a toutes les chances d'être du C++ même si ça pourrait être du C. Il aurait du poster ça dans la rubrique C++, comme ça Taz lui aurait dit que l'arithmétique de ptr c'est du C :D


Message édité par jesus_christ le 29-08-2005 à 18:47:03
n°1186483
chrisbk
-
Posté le 28-08-2005 à 19:22:08  profilanswer
 

masklinn a écrit :


Faut demander à Emmanuel, mais je pense pas, +1 ça va incrémenter le pointeur genre d'un octet unique, donc ça dépend de la taille des éléments de la structure...


 
hé ben ca en raconte des conneries un expert [:klem3i1]

n°1186486
masklinn
í dag viðrar vel til loftárása
Posté le 28-08-2005 à 19:23:37  profilanswer
 

chrisbk a écrit :

hé ben ca en raconte des conneries un expert [:klem3i1]


Sauf que, contrairement à toi, chuis pas expert en C :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1186488
chrisbk
-
Posté le 28-08-2005 à 19:25:49  profilanswer
 

masklinn a écrit :

Sauf que, contrairement à toi, chuis pas expert en C :o


 
c'est les bases ca, mon petit [:klem3i1]
 

n°1186492
masklinn
í dag viðrar vel til loftárása
Posté le 28-08-2005 à 19:30:09  profilanswer
 

chrisbk a écrit :

c'est les bases ca, mon petit [:klem3i1]


Emmanuel l'a déjà dit, s'mal de répéter :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1186495
chrisbk
-
Posté le 28-08-2005 à 19:30:51  profilanswer
 

masklinn a écrit :

Emmanuel l'a déjà dit, s'mal de répéter :o


 
on ne le dira jamais assez, vil petit mangecaca  [:klem3i1]

n°1186499
masklinn
í dag viðrar vel til loftárása
Posté le 28-08-2005 à 19:32:50  profilanswer
 

chrisbk a écrit :

on ne le dira jamais assez, vil petit mangecaca  [:klem3i1]


Je ne mange jamais de kaka, c'est sale [:mmmfff]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1186502
Emmanuel D​elahaye
C is a sharp tool
Posté le 28-08-2005 à 19:35:14  profilanswer
 

masklinn a écrit :

Je ne mange jamais de kaka, c'est sale [:mmmfff]


Faut le laver avant avec du PQ ayant peu servi...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1186508
chrisbk
-
Posté le 28-08-2005 à 19:43:28  profilanswer
 

enfin emmanuel, ca va pas de faire de la pollution ainsi ? [:pingouino]

n°1186509
masklinn
í dag viðrar vel til loftárása
Posté le 28-08-2005 à 19:44:30  profilanswer
 

Emmanuel Delahaye a écrit :

Faut le laver avant avec du PQ ayant peu servi...


ok http://membres.lycos.fr/angel2k/petrus/japtounet.gif

chrisbk a écrit :

enfin emmanuel, ca va pas de faire de la pollution ainsi ? [:pingouino]


Ben non, tu manges le papier avec, tu laves ton caca, tu enveloppes le papier autour, et comme ça tu te met pas de caca sur les doigts [:iorili]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1186510
chrisbk
-
Posté le 28-08-2005 à 19:45:11  profilanswer
 

[:jean-guitou]

n°1186556
Taz
bisounours-codeur
Posté le 28-08-2005 à 21:03:02  profilanswer
 

NounouRs a écrit :

c'est extrait d'un code C que j'ai retranscrit en C++, mais sur ce point la je doute
 
Un pointeur auquel au fait p+1    est ce qu'il pointe sur l'element suivant dans la structure (structure PIXEL)
 

Code :
  1. PIXEL* p = this->adr ;
  2.   for (int i=0; i<h ; i++)
  3.   {
  4.     p+=l;
  5.     this->tab[i]= p ;
  6.   }



 
 

Code :
  1. memcpy(this->tab, this->adr, h * sizeof *this->adr);


 
en espérant de que ce sont de PIXEL des 2 côtés.

n°1186559
chrisbk
-
Posté le 28-08-2005 à 21:04:20  profilanswer
 

taz > perdu [:dawa]

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  "pointeur +1" pointe l'élément suivant ?

 

Sujets relatifs
Afficher le formulaire suivant en CSS (sans tableaux)MySQL : requete suivant le mois en cours
cast vers un pointeur sur tableauprobleme de selection d element dans liste deroulante
[JAVA] Comment recuperer un element dans un JScrollPanechanger le css suivant la résolution client ???
Acceder au nom de l'element d'une liste multiple[C++] STL Vector : Suppression d'un ième élément
créer un objet d'un element de base de données.Supprimer element d'un Jlist simplement.... GALERE
Plus de sujets relatifs à : "pointeur +1" pointe l'élément suivant ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR