CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Programmation] Les pointeurs.

FitzChevaIerie
FitzChevaIerie
Niveau 10
01 février 2010 à 22:40:01

Voilà en fait on a commencé la programmation en élec, (en C), et j'ai un peu de mal pour ce qui est des pointeurs.
On a pas vu de cours sur le C, on a directement commencé avec un Tp où il y a 3 pages pour expliquer les grandes lignes, et un exemple avec un truc qui allume des LEDS.
Je précise que mon prof est (très) bordélique, assez évasif dans les explications comme s'il était toujours pressé... Et quand un truc est évident pour lui, il considère que ça l'est aussi pour nous... Du coup quand il attaque un chapitre comme la programmation, c'est assez dur de suivre :p)
Je précise aussi que j'ai quelques notions (je m'amusais à programmer des jeux sur ma Casio l'an dernier mais j'ai appris tout seul en essayant au hasard, alors ce sont pas forcément des bonnes bases...)

En fait le programme, c'est ça :

char *portb;
char SORTIE;
int PORTB;

void main()
{
PORTB=0x1004;
portb=PORTB;
SORTIE=0;

  • portb=SORTIE;
  • portb=0xE0;

}

(il y a quelques commentaires qui n'aident pas beaucoup, en fait la valeur 0 ou E0 va s'afficher en binaire sur des leds)
Dans la suite du TP le programme s'allonge un peu mais la seule partie qui me pose problème c'est ça.

Ce que j'avais compris de premier abord, et avec les fiches en début de TP, c'est que :
:d) *portb est un pointeur (à cause de l'étoile), SORTIE et PORTB sont des variables
:d) on donne la valeur 0x1004 à PORTB, puis on donne la valeur PORTB à portb, et enfin la valeur 0 à SORTIE
:d) à l'adresse indiquée par portb (0x1004), on met la valeur de SORTIE. Puis on y met la valeur 0xE0.
Donc selon moi, un pointeur aurait une valeur (0x1004 ici) qui correspond à l'adresse d'une autre variable. *portb désignerait la valeur de cette autre variable.

Quand j'ai demandé des précisions au prof, il m'a totalement embrouillé :( Ce que j'ai compris de ce qu'il m'a dit :
:d) les * ne servent à rien, on pourrait très bien les enlever (il l'a fait, le programme ne marchait plus, après 30 min à chercher dans les menus il les a remises et ça remarchait.)
:d) portb et SORTIE sont des variables, PORTB est un pointeur. Quand je lui ai demandé comment on reconnaissait les variables des pointeurs, il a répondu "c'est normal puisque c'est un pointeur!". Quand j'ai insisté, il m'a dit que les pointeurs étaient forcément sur 16 bits sur ce micro contrôleur. (car les adresses vont de 0000 à FFFF)
:d) on place la variable portb à l'adresse PORTB, puis on change sa valeur (d'abord 0, puis E0)

Voilà je suis un peu paumé, surtout l'histoire des * et de leur soi-disante inutilité, ça me paraît louche... En cherchant un peu sur le net, ça semble plutôt pencher de mon côté (enfin, du côté de la fiche dans son TP).

Nain
Nain
Niveau 10
01 février 2010 à 23:00:05

Pour moi * est indispensable et signifie que portb est un pointeur et les deux autres sont des variables :/

JamminTiger
JamminTiger
Niveau 10
01 février 2010 à 23:14:36
  • est obligatoire, c'est ce qui déclare le pointeur.

Confirmation :
http://www.squalenet.net/fr/ti/tutorial_c/11-pointeurs.php5

Tidus1188
Tidus1188
Niveau 10
01 février 2010 à 23:51:05

Jerry du prof qui ose dire que * ou pas * c'est la même chose. :rire:

cj_johnson
cj_johnson
Niveau 10
02 février 2010 à 01:25:47

pourquoi t'as besoin de pointeurs ?

cj_johnson
cj_johnson
Niveau 10
02 février 2010 à 01:34:08

char *portb; // declaration du pointeur *portb
char SORTIE; //
int PORTB;

void main()
{
PORTB=0x1004; // affectation de l'adresse 0x1004 à PORTB (qui doit correpondre aux Led)

portb=PORTB; // le pointeur pointe sur PORTB, si tu affectes à *portb une valeur x alors PORTB=x

SORTIE=0;

  • portb=SORTIE; // c'est ce qui se passe ici : PORTB = 0
  • portb=0xE0; // PORTB = 0xE0, par contre, je vois pas l'interet :hap:

}

cj_johnson
cj_johnson
Niveau 10
02 février 2010 à 01:56:11

Et donc ton prof a raison.

XxAcyDBurNxX
XxAcyDBurNxX
Niveau 8
02 février 2010 à 17:53:47

Il suffit de se dire que les pointeurs ne présentent qu'un intérêt de rapidité d'exécution et un code plus propre. Tout est toujours réalisable sans les pointeurs.

Tidus1188
Tidus1188
Niveau 10
02 février 2010 à 18:04:44

Non. Une fonction ne peut rendre plusieurs images qu'en utilisant des pointeurs.

FitzChevaIerie
FitzChevaIerie
Niveau 10
02 février 2010 à 20:42:01

Ok cj j'ai compris, en gros c'est ce qu'a dit mon prof mais c'est bien *portb le pointeur et non PORTB.

PORTB=0x1004; // affectation de l'adresse 0x1004 à PORTB (qui doit correpondre aux Led)

:d) Par contre là comment on sait qu'on lui affecte une adresse et non qu'on donne une valeur à la variable ?

Tidus1188
Tidus1188
Niveau 10
02 février 2010 à 20:58:29

Nan là on donne une valeur à PORTB. Pas une adresse.

Tidus1188
Tidus1188
Niveau 10
02 février 2010 à 21:12:33

Par contre cette valeur servira d'adresse ensuite. Puisqu'elle est stockée par le pointeur *portb juste après.

FitzChevaIerie
FitzChevaIerie
Niveau 10
03 février 2010 à 13:18:40

Ben ça c'est ce que j'ai dit dans mon premier post :doute: Je me suis peut être mal exprimé.

PORTB=0x1004;
portb=PORTB;

  • portb=0;

Si on fait ça, est-ce que c'est PORTB qui va être égal à 0 ou la variable qui se trouve à l'adresse 0x1004 ?

Tidus1188
Tidus1188
Niveau 10
03 février 2010 à 17:02:54

C'est la valeur de la variable pointée par portb qui va être égale à 0. C'est à dire la variable d'adresse 0x1004.

Rappel :

Si je créé un pointeur *pointeursurbidule par exemple :

int bidule = 0;
int *pointeursurbidule = NULL;

pointeursurbidule = &bidule; //pointe sur bidule

  • pointeursurbidule = 0; // donne la valeur 0 à bidule
Tidus1188
Tidus1188
Niveau 10
03 février 2010 à 17:08:09

C'est à dire que quand tu mets un * à ton pointeur c'est pour affecter une valeur. Sans * c'est pour affecter une adresse.

En gros si je m'amuse à faire dans cet exemple un affichage :

printf("%ld", pointeursurbidule); //affiche l'adresse pointée, ie l'adresse de bidule
printf("%ld", *pointeursurbidule); //affiche la valeur de la variable pointée, ie la valeur de bidule

XxAcyDBurNxX
XxAcyDBurNxX
Niveau 8
03 février 2010 à 18:52:45
  1. Tidus1188 Voir le profil de Tidus1188
  2. Posté le 2 février 2010 à 18:04:44 Avertir un administrateur
  3. Non. Une fonction ne peut rendre plusieurs images qu'en utilisant des pointeurs.

Les variables globales, tu connais ? Tu n'as pas fait de C, en C on ne disposait que de ça. Les pointeurs rendent les programmes plus rapides, mais absolument tout est réalisable sans pointeur, dans une programmation qu'on qualifierait peut-être aujourd'hui de "pas très propre", mais qui était très utilisée quand le C++ n'existait pas.

Nain
Nain
Niveau 10
03 février 2010 à 19:10:51

T'es en train de dire que les pointeurs existent que en C++ ? :/

Tidus1188
Tidus1188
Niveau 10
03 février 2010 à 19:14:38

Ce qui est totalement faux.

XxAcyDBurNxX
XxAcyDBurNxX
Niveau 8
03 février 2010 à 19:27:37

Je me suis mal exprimé. Ce que je veux dire, c'est qu'au début, les pointeurs étaient peu utilisés ; on travaillait beaucoup plus avec des variables globales, car le problème d'optimisation ne s'exprimait que pas ou peu. Il faut comprendre qu'il est tout à fait possible de faire exactement le même programme sans ou avec les pointeurs, ce que Tidus a apparemment réfuté. Maintenant, quand on parle d'optimisation, c'est autre chose.

cj_johnson
cj_johnson
Niveau 10
03 février 2010 à 19:30:01

Comment on fait des pointeurs sans en utiliser ? (en C)

Sous forums
  • Histoire
  • Environnement & Nature
  • Politique
  • Cours et Devoirs
  • Philosophie
  • Métiers & Orientation
La vidéo du moment