Incrémenter des pointeurs????

seljazou Messages postés 185 Statut Membre -  
loupius Messages postés 789 Statut Membre -
Bonjour,

J'ai cherché sur plusieurs sites, à propos de pointeurs, leur incrémentation..... voila ma déduction, mais je ne crois pas que ça soit juste. Je sens qu'il y a une faille.

soit p pointeur qui pointe sur un TYPE.

p est l'adresse de *p. l'adresse suivante est p+1 qui est en réalité égale à p + sizeof(TYPE).

et si on affiche les valeurs de p et de p+1 et de p+sizeof(TYPE), trouverons les deux premiers successifs, et les deux derniers égaux???

c juste???

merci pour votre attention.

3 réponses

nobie-cs Messages postés 157 Statut Membre 17
 
je croit pas :)

par exemple "1223" l'adresse de nb et *p et un pointeur de nb p+1 donne "1224"
0
Maman ! chui pas bô
 
Hello
ça dépend de tes options de compilation. parce que c'est un sujet sensible : les débutants se plantent systématiquement alors que les pisseurs de code s'en servent sans s'en rendre compte
avec du typage (*p)++ pointe le p suivant alors que sans ça pointe l'octet suivant
0
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
 
#include<stdio.h>

int main (){
    char aa, *a = &aa;
    int bb, *b = &bb;
    double cc, *c=&cc;

    //ici on constate bien la différence. le +1 ajoute juste l'espace d'un char.
    printf("%d   %d   %d\n", a, a+1, a+sizeof(char));
    printf("%d   %d   %d\n", b, b+1, b+sizeof(int));
    printf("%d   %d   %d\n", c, c+1, c+sizeof(double));
    a++;b++;c++;
    // de même, incrémenter avec ++ fait bien la même chose que +1
    printf("%d\n", a);
    printf("%d\n", b);
    printf("%d\n", c);
    getchar();
} 


ce programme montre la différence. Par contre ça m'étonne que ça dépende des options de compilation ! Ce n'est pas dit dans la norme ?
0
loupius Messages postés 789 Statut Membre 148
 
//ici on constate bien la différence. le +1 ajoute juste l'espace d'un char.
Ok, pour le cas du pointeur 'a', mais pas pour les autres.
Si on suppose que 'b' pointeur de type 'int' vaut 1224, alors l'instruction
printf("%p %p %p\n", b, b+1, b+sizeof(int));
donnera, en supposant qu'un entier 'int' est sur 4 octets:
1224 1228 1234
Nota: l'affichage des pointeurs se fait par '%p'.
Quant aux options de compilation modifiant l'arithmétique des pointeurs, j'ai aussi de gros doutes.
Bonne nuit.
0