Général Généralités sur les variables, librairies, ... pour les débutants

  • Auteur de la discussion gégé62
  • Date de début
gégé62
gégé62
Compagnon
26 Fev 2013
2 863
Harnes (Pas de Calais)
  • Auteur de la discussion
  • #16
@jicer
@lion10

merci à vous.
En fait, bien sûr, j'ai déjà lu tout ça (sinon il aurait été indécent de ma part d'aborder le sujet ainsi...:wink: ) Je lis actuellement un livre de "C" (1990) retrouvé au grenier, qui appartenait - qui appartient d'ailleurs ! - à l'un de mes garçons. Donc je suis sur les pointeurs en ce moment....

En fait je crois que , comme souvent, la connaissance doit venir avec la pratique. J'ai beau lire 20 fois les mêmes choses, ça ne rentrera pas si je ne mets pas en application, donc....faut que je me mette à l'eau...

Quelques questions précises:
point = &tableau[0]; // point pointe sur le premier élément du tableau
est-ce c'est la même chose de dire: "la variable point est l'adresse du premier..."
alors qu'un pointeur fait typiquement 4 octets en terme de taille.
c'est en rapport avec la taille de la mémoire je suppose (de toutes les mémoires cumulées), qui détermine le nombre d'adresses possibles ?
4 octets = un peu plus que 4 Giga d'adresses possibles
par contre tu définis
int *point; // déclaration du pointeur
ce qui fait 2 octets (enfin avec Arduino) mais qui est limité à 65536 adresses. Par contre avec 4 octets, c'est > 4 Giga. Donc pour les "petits" micro controleurs (Arduino, 32 k) "les pointeurs en int" suffisent, pour les "gros" PC, il faut 4 octets (unsigned long ?) ?

merci
 
lion10
lion10
Compagnon
7 Mai 2010
4 712
Bonjour
est-ce c'est la même chose de dire: "la variable point est l'adresse du premier..."
Oui dans les faits après l'affectation, d'allleurs j'ai mis en dessous une autre possibilité. Le "&" est l'opérateur qui prend l'adresse, le [0] correspond à la première adresse. Bien entendu avec [1] vous n'êtes plus au début mais c'est aussi possible.

c'est en rapport avec la taille de la mémoire je suppose (de toutes les mémoires cumulées), qui détermine le nombre d'adresses possibles ?
4 octets = un peu plus que 4 Giga d'adresses possibles
J'ai mis 4 octets mais en pensant à une l'application avec un micro-contrôleur qui avait 32 fils d'adresses.
Il faut considérer ce que permet le standard C Ansi, ce que permet le compilateur et ce que permet l'adressage mémoire du micro. Normalement les 2 derniers sont en phase c'est donc le compilateur qui dicte ces considérations avec des limitations. Il faudrait voir si "size of" est utilisable avec arduino , il permettra d'avoir une confirmation par l'expérimentation de la taille du pointeur. On arrive aux frontières entre le matériel et le logiciel, là il faut être prudent si par exemple on veut faire un logiciel qui fonctionnera partout sans modification, pour des applications poussées on pourra utiliser de la compilation conditionnel et des "size of".

ce qui fait 2 octets (enfin avec Arduino) mais qui est limité à 65536 adresses. Par contre avec 4 octets, c'est > 4 Giga. Donc pour les "petits" micro controleurs (Arduino, 32 k) "les pointeurs en int" suffisent, pour les "gros" PC, il faut 4 octets (unsigned long ?) ?
Il faut bien distinguer la taille du pointeur permise par le compilateur de la taille de l'objet pointé.
Dans l'absolu si vous n'avez que 12 cases de 8 bits de large dans un micro le compilateur va sans doute limiter la taille du pointeur à un octet, mais 12 cases permettent de caser 12 variables de largeur 8 bits , mais aussi 6 variables de largeur 16 bits ou 3 de largeur 32 bits. Dans le premier cas quand vous incrémentez le pointeur il est juste augmenté de 1, mais dans le second il est augmenté de 2 et dans le dernier cas il est augmenté de 4, En effet selon la taille de la variable passer à la suivante c'est faire un saut plus ou moins important dans les cases mémoires.
Là encore il faut voir ce que permet le compilateur de l'arduino il peut aussi interdire certains types de variables ou s'écarter du C ansi et ne pas différencier 2 types de variables (float ou double à voir...) ou leur attribuer un nombre d'octets particulier.
On voit à travers l'exemple ci dessus que forcément la taille figée en dur dans le micro 8, 16 bits ou 32 bits par exemple fera qu'il sera faible puissant ou mauvais pour faire des calcul sur des variables longues.
Attention la taille d'un pointeur est la même pour des variables de type différents, mais il ne faut pas utiliser directement, sauf à savoir ce que l'on fait, un pointeur sur int pour pointer un char, sinon on saute des valeurs à chaque incrémentation du pointeur. (L'usage de cast devrait pouvoir se faire mais c'est une utilisation plus spécifique.)

Ps : Il faut signaler aussi l'utilisation des pointeurs pour des listes chainées et dans l'allocation mémoire dynamique.

cdlt lion10
 
gégé62
gégé62
Compagnon
26 Fev 2013
2 863
Harnes (Pas de Calais)
  • Auteur de la discussion
  • #18
merci, je vais méditer tout cela tranquillement....
ça mérite une impression papier, tant pis pour l'effet de serre....:wink:
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 204
Corsier-sur-Vevey (Vaud)
est-il abusé de te demander, si tu en as le temps, de mettre des commentaires sur les lignes de programmation
C'est certain que les commentaires sont super importants dans un programme mais, un choix judicieux de nom de variable peut aisément remplir ce rôle, ainsi

int v; // Valeur lue sur le potentiomètre A
commentaire qu'il faudra répéter à chaque usage de la variable v.

int valeurPotentiometreA;
le nom de la variable est suffisamment explicite pour éviter de la commenter et le programme est directemement lisible.

Et celà ne coûte pas un octet de plus dans l'Arduino.

Evitez les noms "plats",valeurpotentiometreaest moins lisible quevaleurPotentiometreA.


Bonne journée

jpbbricole
 
La dernière réponse à ce sujet date de plus de 6 mois
Haut