Les mecs chauds en C je vous défie de répondre à cette question

MrPenisVagin
2021-02-28 22:56:43

Quand j'ai une variable de type int*, si je fais variable++, elle va pointer vers la prochaine case en mémoire qui peut occuper un int.

Quand j'ai une variable de type scrut a*, si je fais variable++, elle va aussi pointer vers la prochaine case en mémoire qui peut occuper une struct a.

Comment ça se fait ? Comment sa se fait qu'en incrementant de un on passe plusieurs case de mémoire d'un seul coup ? (en supposant que sizeof(struct a) donne une valeur differente de 1)

MrPenisVagin
2021-02-28 23:00:29

:up:

NNeguev
2021-02-28 23:00:36

Tu devrais poser la question dans le forum programmation, l’admin est chaud sur ça.

Sinon c’est qu’un pointeur pointé sur un acces mémoire donc à une pièce dans sa globalité et non à un simple octet.
Donc si tous les int sont codés sur 4 bits alors ton pointeur te redirige vers ces 4 bits. Et si tu l’incrémentes c’est 4 suivants

alcuin
2021-02-28 23:01:18

C'est juste de l'arithmétique de pointeur non ?

alcuin
2021-02-28 23:04:04

Si tu crées une structure, sa mémoire est réservée, si tu incrementes ton pointeur, tu te déplaces vers une autre Zone mémoire tout simplement... Mais ça fait des années que je n'ai pas joué avec ça. Sans doute le premier conseil que Néguev donne est le meilleur.

JencuIeTesMorts
2021-02-28 23:06:58

Je suis l'OP, j'ai été banni sur mon premier compte :hap:

Le 28 février 2021 à 23:00:36 NNeguev a écrit :
Tu devrais poser la question dans le forum programmation, l’admin est chaud sur ça.

Sinon c’est qu’un pointeur pointé sur un acces mémoire donc à une pièce dans sa globalité et non à un simple octet.
Donc si tous les int sont codés sur 4 bits alors ton pointeur te redirige vers ces 4 bits. Et si tu l’incrémentes c’est 4 suivants

Donc si j'ai bien compris :

printf(sizeof(struct a)); // donne 10
struct a* variable = malloc(sizeof(struct a));
printf("%p", variable) // si ici ça donne 1000
variable++;
printf("%p", variable) // ici ça donnera 1010

C'est ça ?

alcuin
2021-02-28 23:07:11

Mais ouais, comme dit Néguev : un int* pointe vers une zone mémoire nécessaire pour un int (2 octets ?) Un struct * vers une zone mémoire sizeof(struct)

JencuIeTesMorts
2021-02-28 23:09:21

Le 28 février 2021 à 23:07:11 alcuin a écrit :
Mais ouais, comme dit Néguev : un int* pointe vers une zone mémoire nécessaire pour un int (2 octets ?) Un struct * vers une zone mémoire sizeof(struct)

Ca je le savais, ce que je comprends pas c'est comme tu dis l'arithmétique des pointeurs, c'est à dire si quand tu adicione 1 à un pointeur ça adicionne vraiment 1 ou bien si il adapte cette addition en fonction du type du pointeur.

alcuin
2021-02-28 23:10:18

Le 28 février 2021 à 23:06:58 JencuIeTesMorts a écrit :
Je suis l'OP, j'ai été banni sur mon premier compte :hap:

Le 28 février 2021 à 23:00:36 NNeguev a écrit :
Tu devrais poser la question dans le forum programmation, l’admin est chaud sur ça.

Sinon c’est qu’un pointeur pointé sur un acces mémoire donc à une pièce dans sa globalité et non à un simple octet.
Donc si tous les int sont codés sur 4 bits alors ton pointeur te redirige vers ces 4 bits. Et si tu l’incrémentes c’est 4 suivants

Donc si j'ai bien compris :

printf(sizeof(struct a)); // donne 10
struct a* variable = malloc(sizeof(struct a));
printf("%p", variable) // si ici ça donne 1000
variable++;
printf("%p", variable) // ici ça donnera 1010

C'est ça ?

Il a du sens ton code c'est bien ce qui s'affiche ? L'adresse est 1000, du coup le pointeur suivant va vers 1010 puisqu'il saute la taille d'une structure 10.

alcuin
2021-02-28 23:11:38

Le 28 février 2021 à 23:09:21 JencuIeTesMorts a écrit :

Le 28 février 2021 à 23:07:11 alcuin a écrit :
Mais ouais, comme dit Néguev : un int* pointe vers une zone mémoire nécessaire pour un int (2 octets ?) Un struct * vers une zone mémoire sizeof(struct)

Ca je le savais, ce que je comprends pas c'est comme tu dis l'arithmétique des pointeurs, c'est à dire si quand tu adicione 1 à un pointeur ça adicionne vraiment 1 ou bien si il adapte cette addition en fonction du type du pointeur.

Y a un type de pointeur, int* c'est « un pointeur vers un int»

Je serai pas de très grand secours. Mais le bout de code que tu partages est conforme à mon idée du truc.

JencuIeTesMorts
2021-02-28 23:11:55

Le 28 février 2021 à 23:10:18 alcuin a écrit :

Le 28 février 2021 à 23:06:58 JencuIeTesMorts a écrit :
Je suis l'OP, j'ai été banni sur mon premier compte :hap:

Le 28 février 2021 à 23:00:36 NNeguev a écrit :
Tu devrais poser la question dans le forum programmation, l’admin est chaud sur ça.

Sinon c’est qu’un pointeur pointé sur un acces mémoire donc à une pièce dans sa globalité et non à un simple octet.
Donc si tous les int sont codés sur 4 bits alors ton pointeur te redirige vers ces 4 bits. Et si tu l’incrémentes c’est 4 suivants

Donc si j'ai bien compris :

printf(sizeof(struct a)); // donne 10
struct a* variable = malloc(sizeof(struct a));
printf("%p", variable) // si ici ça donne 1000
variable++;
printf("%p", variable) // ici ça donnera 1010

C'est ça ?

Il a du sens ton code c'est bien ce qui s'affiche ? L'adresse est 1000, du coup le pointeur suivant va vers 1010 puisqu'il saute la taille d'une structure 10.

J'ai pas testé en fait, je t'avoue que maintenant que j'ai bien formulé ma question je pourrais verifier ça en 30 secondes :hap:

alcuin
2021-02-28 23:12:47

Le 28 février 2021 à 23:11:55 JencuIeTesMorts a écrit :

Le 28 février 2021 à 23:10:18 alcuin a écrit :

Le 28 février 2021 à 23:06:58 JencuIeTesMorts a écrit :
Je suis l'OP, j'ai été banni sur mon premier compte :hap:

Le 28 février 2021 à 23:00:36 NNeguev a écrit :
Tu devrais poser la question dans le forum programmation, l’admin est chaud sur ça.

Sinon c’est qu’un pointeur pointé sur un acces mémoire donc à une pièce dans sa globalité et non à un simple octet.
Donc si tous les int sont codés sur 4 bits alors ton pointeur te redirige vers ces 4 bits. Et si tu l’incrémentes c’est 4 suivants

Donc si j'ai bien compris :

printf(sizeof(struct a)); // donne 10
struct a* variable = malloc(sizeof(struct a));
printf("%p", variable) // si ici ça donne 1000
variable++;
printf("%p", variable) // ici ça donnera 1010

C'est ça ?

Il a du sens ton code c'est bien ce qui s'affiche ? L'adresse est 1000, du coup le pointeur suivant va vers 1010 puisqu'il saute la taille d'une structure 10.

J'ai pas testé en fait, je t'avoue que maintenant que j'ai bien formulé ma question je pourrais verifier ça en 30 secondes :hap:

Yes. Ben moi je te laisse, je ne saurai pas t'aider plus. Mais je pense que tu tiens le bon bout et oui, faut faire des tests :ok:

alcuin
2021-02-28 23:13:38

(je m'étais trop pris la tête à l'époque avec ces trucs :rire: matlab c'est bien !)

JencuIeTesMorts
2021-02-28 23:17:10

Le 28 février 2021 à 23:12:47 alcuin a écrit :

Le 28 février 2021 à 23:11:55 JencuIeTesMorts a écrit :

Le 28 février 2021 à 23:10:18 alcuin a écrit :

Le 28 février 2021 à 23:06:58 JencuIeTesMorts a écrit :
Je suis l'OP, j'ai été banni sur mon premier compte :hap:

Le 28 février 2021 à 23:00:36 NNeguev a écrit :
Tu devrais poser la question dans le forum programmation, l’admin est chaud sur ça.

Sinon c’est qu’un pointeur pointé sur un acces mémoire donc à une pièce dans sa globalité et non à un simple octet.
Donc si tous les int sont codés sur 4 bits alors ton pointeur te redirige vers ces 4 bits. Et si tu l’incrémentes c’est 4 suivants

Donc si j'ai bien compris :

printf(sizeof(struct a)); // donne 10
struct a* variable = malloc(sizeof(struct a));
printf("%p", variable) // si ici ça donne 1000
variable++;
printf("%p", variable) // ici ça donnera 1010

C'est ça ?

Il a du sens ton code c'est bien ce qui s'affiche ? L'adresse est 1000, du coup le pointeur suivant va vers 1010 puisqu'il saute la taille d'une structure 10.

J'ai pas testé en fait, je t'avoue que maintenant que j'ai bien formulé ma question je pourrais verifier ça en 30 secondes :hap:

Yes. Ben moi je te laisse, je ne saurai pas t'aider plus. Mais je pense que tu tiens le bon bout et oui, faut faire des tests :ok:

J'ai testé et c'est bel et bien ça, quand tu fais :

pointeur += i;

il fait "en réalité"

pointeur += i *sizeof(typeDuPointeur);

merci pour l'aide :oui:

Infos
Gestion du forum

contact@geevey.com

API disponible. Utilisez le paramètre "api" en GET, peu importe le contenu, sur une page du site.

Notes

    ⚠️ Les archives de novembre sont désormais disponibles.
Non-assumage
    Personne n'a pas assumé de topic pour le moment.