Aller au menu - Aller au contenu

À l'assaut des pointeurs

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2  3  ...  14  15  16  17  18  Suivante
Pseudo Commentaire
Page Précédente  1  2  3  ...  14  15  16  17  18  Suivante
Hors ligne kobikobo # Posté le 06/11/2011 à 10:15:01
Avatar

Avis : Très bon

salut moi j'ai 14 ans :-°
est j'ai compris que les pointeurs servez a envoyez plusieur information :o
mais c tout c qui faut savoir sur se chapitre est comment etre sur de se rapellez des premiere lecon :euh:
Connecté informaticienzero # Posté le 21/11/2011 à 22:43:41
City Hunter
Avatar

Note à tous ceux qui poste : prière d'écrire français correctement. C'est pas un portable, pas de langage SMS.

Ensuite, OSEF de votre âge, vous pouvez avoir 10 ans comme 90 ça change rien. Pas la peine de raconter au monde entier que vous avez compris.

Pour ne pas être HS, le chapitre est plutôt pas mal, explique juste en quoi les variables globales sont mals (là tu dis "beurk" mais on sait pas pourquoi).

Image utilisateur Aidez ce chat à conquérir le monde, mettez-le dans votre signature.

Vous voulez apprendre à programmer mais vous ne savez pas par où commencer ?

90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.
 
Hors ligne hastaris # Posté le 03/12/2011 à 15:13:05
Avatar

Salut ,
je voulais souligner un point qui n'a pas l'air tout a fais evident pour certain d'apres ce que j'ai vus : le simple fait de demander une valeur a l'utilisateur est une utilisation ... des pointeur !!! :D
en effet , lorsque l'on écrit des chose du genre :

printf("quelle age a tu ?");// normal , on affiche du texte
scanf("%d", &AGE ); // on utlise un pointeur a cette ligne : on demande de rentrer la valeur a l'adresse de AGE !!

je le dit juste comme ca parce que certain pense que cela n'est pas une utilisation des pointeur ... :-°
bonne programation , et surtout , ne lachez pas , la suite est super interresante !!! :)



Qui ne tente rien n'a rien :p
 
Hors ligne freddou1985 # Posté le 07/12/2011 à 17:27:48

Salut! Super tuto, comme d'hab!
J'aurai juste une question sur ce que j'ai lu! je me suis arréter avant la derniere partie ou on parle de fonction car je voulais etre sur que ce que je pense est correct..

j'ai fait le test suivant!



#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main(int argc, char *argv[])
{
int age=10;
int *pointAge=&age;
printf("%d\n",&pointAge);
printf("%d\n",pointAge);
printf("%d\n",&age);
printf("%d\n",&*pointAge);
printf("%d\n",*pointAge);
printf("%d\n",age);
return 0;

}

ou j'obtient successivement:
2293576
2293580
2293580
2293580
10
10

on constate donc dans cette exemple que la valeur donné par *pointAge est la valeur donné par la variable age comme il est dit dans le tuto, mais en plus on a &*pointAge donne la meme adresse que &age donc on peut en deduire que *pointAge est la meme chose que la variable age non? Desole si ca a deja ete mentionne mais je n'ai rien trouver en ce qui concerne l'adresse de *pointAge!
Merci pour vos reponses!
Hors ligne Erfive # Posté le 08/12/2011 à 18:35:51

Salut à tous !
Pour ma part j'ai relever quelque chose qui n'est pas vraiment une erreur mais plutôt une incohérence. C'est dans le code sources final, qui nous donne le résultat du "fil rouge".


void decoupeMinutes(int* pointeurHeures, int* pointeurMinutes);

int main(int argc, char *argv[])
{
int heures = 0, minutes = 90;

// On envoie l'adresse de heures et minutes
decoupeMinutes(&heures, &minutes);

// Cette fois, les valeurs ont été modifiées !
printf("%d heures et %d minutes", heures, minutes);

return 0;
}

void decoupeMinutes(int* pointeurHeures, int* pointeurMinutes)
{
/* Attention à ne pas oublier de mettre une étoile devant le nom
des pointeurs ! Comme ça, vous pouvez modifier la valeur des variables,
et non leur adresse ! Vous ne voudriez pas diviser des adresses
n'est-ce pas ? ;o) */
*pointeurHeures = *pointeurMinutes / 60;
*pointeurMinutes = *pointeurMinutes % 60;
}


________________________________________

Au tout début du code, on peut voir qu'il y a "
void decoupeMinutes(int* pointeurHeures, int* pointeurMinutes);" or au début de ce chapitre, on nous dit de mettre les étoiles justes avant les pointeurs, donc plutôt avoir
void decoupeMinutes(int *pointeurHeures, int *pointeurMinutes);

Bon c'est un petit détail ^^
Sinon une autre chose aussi, étrangement dans chaque codage, le signe & est différent du signe que tu utilises quand tu expliques les choses.
Difficile de mieux m'expliquer, il y a un signe qui ressemble vaguement à celui ci &, je ne sais pas si quelqu'un d'autre peut m'aider à m'expliquer...
En gros depuis le début du cours il y a deux signes &, un qui apparait dans les codages et un autre (la même lettre mais écrite différemment) dans les explications. Pour avant ce n'était pas gênant parce qu'on ne pouvais pas confondre, mais ici j'avoue que ça complique un peu la chose (pour ma part), je sais pas s'il y a moyen d'harmoniser le tout ! Ce serait super !
Hors ligne freddou1985 # Posté le 11/12/2011 à 15:27:17

re pour ma question precedente j'ai eut ma reponse ^^ quand on pointe une variable avec un pointeur ie lorsque on a:

int *point = &age; alors on aura *point et age qui sont deux variable equivalente ie qui auront meme valeure a l'appel et meme adresse..

en revanche je bloc sur le file rouge, j'ai tester un programme qui ma l'aire plutot correct mais l'or de l'execution lorsqu'on me demande le nombre de minute, et bien lorsque je tape par exemple 350, et entrer j'ai l'impression que mon scanf ne fait pas son boulot puisque la barre va a la ligne et clignotte comme si elle attendais encore des infos! si je reecri encore un nombre alors le programme se termine et me donne alors la bonne reponse en ayant pris en compte la premiere valeure que jai donné, bref c'est tres bizarre, si quelqu un a la solution a ce probleme, je vous donne mon code:

#include <stdio.h>
#include <stdlib.h>

void Convpointeur (int *pointeur1,int *pointeur2); //prototype

int main(int argc,char *argv[])
{
int minutes = 0;
int m = 0;
int h = 0;
printf("Donnez le nombre de minutes a convertir:\n");
scanf("%d\n",&minutes);
m = minutes;
Convpointeur(&h,&m);
printf("%d minutes correspondent a %d heures et %d minutes",minutes,h,m);
return 0;
}

void Convpointeur (int *pointeur1,int *pointeur2)
{
*pointeur1 = *pointeur2 / 60;
*pointeur2 = *pointeur2 % 60;
}
Hors ligne freddou1985 # Posté le 11/12/2011 à 16:36:02

c'est bon j'ai trouvé c'est le \n dans le scanf :p
Hors ligne leonardbianciotto # Posté le 11/01/2012 à 14:07:47
Avatar

j'aprend a programer en c et avec ta lecon sur les pointeurs j'ai tape ca et ca marche pas
#include <stdio.h>
#include <stdlib.h>

int main()
{
int age=14;
int *pointeurSurAge = &age;
printf("%d", pointeurSurAge);
return 0;
}
Hors ligne Thoviefeh # Posté le 12/01/2012 à 21:10:23

Bonjour.

J'ai un problème, en gros j'ai voulu faire le dernier exemple, mais sans aide... Ok, apparemment j'ai plusieurs erreurs que je n'arrive pas à résoudre ><. Alors je compare avec celui de M@teo, et c'est le même O_O. Sauf que le mien et bah il fonctionne pas, sauf quand je fais "run" au lieu de "build and run". Voici mon code, j'ai beau retourner le problème dans tous les sens, y a pas moyen ... :

#include <stdio.h>
#include <stdlib.h>

void decoupage(int *he, int *mi);

int main(int argc, char *argv[])
{
int heure = 0, int minute = 90;
int *pHeure = &heure;
int *pMinute = &minute;

decoupage(pHeure, pMinute);

printf ("Il est %d H et %d M.", *pHeure, *pMinute);

return 0;
}

void decoupage(int *he, int*mi)
{
*he = *mi / 60;
*mi = *mi % 60;
}
Hors ligne Thoviefeh # Posté le 12/01/2012 à 21:24:33

Et pour résoudre le problème de leonardbianciotte, saches qu'il faut mettre %p et non pas %d pour afficher l'adresse. Voilà ^^
Hors ligne tawni1 # Posté le 22/01/2012 à 01:24:43

Bonjour,
je suis nouveau sur ce site et ça me plait bcp la façon de donner des cours.
j'ai lu qlq commentaires surtout de Thoviefeh, si j'ai bien compris en gros il n'y a pas de différence entre %d et %p, c'est une question d'écriture (décimal ou hexa). je croie que le problème de leonardbianciotto qu'il oublié d'ajouter une étoile * dans printf("%d", pointeurSurAge);qui devrait être printf("%d", *pointeurSurAge);
Hors ligne tawni1 # Posté le 22/01/2012 à 02:00:49

Slt Thoviefeh,
j'ai essayé de compiler ton code et je croie que j'ai trouvé l'erreur:
quand t'as déclaré les variables t'as écrit :
int heure = 0, int minute = 90;
à mon avis il faut soit mettre
int heure = 0 ; int minute = 90;
ou int heure = 0,minute = 90; pour ne pas déclarer la nature de variable deux fois, apparemment
Hors ligne maxstill59 # Posté le 24/01/2012 à 23:01:37

Avis : Très bon

Salut, déjà merci pour ce cours on ne peut plus clair (en tout cas jusque là lol) ! Bien que mes notions en PHP et surtout en Ocaml m'aident pas mal :)

J'ai malgré tout, une toute petite question qui persiste. Je ne doute en aucun cas de l'utilité des pointeurs, mais en ce qui concerne l'exemple pratique du "découpe minutes" : n'aurait il pas été possible de le régler avec des variables "static" ? Sans utiliser les pointeurs.

Merci d'avance !
Hors ligne fanfanyy # Posté le 04/02/2012 à 10:08:21

Avis : Bon

Bonjour,

En fait pour le 1er exemple,
on peut enlever "printf("%d heures et %d minutes", heures, minutes);" du main
et le mettre dans la fonction "decoupeMinutes".
et ça marchait
Hors ligne Abdellatif Chlikha # Posté le 05/02/2012 à 21:38:06
Avatar

Dans l'exemple de la convertion minuts===> minuts heures en peut utiliser les variables globales
V'la un programme qui marche bien
#include<stdio.h>
#include<stdlib.h>
int min=0;
int h=0;
int sec=0;
void conv(int secondes)
{
h=secondes/3600;
min=(secondes%3600)/60;
sec=(secondes%3600)%60;
}
int main()
{
int secondes;
printf("Entrer de secondes");
scanf("%d",&secondes);
conv(secondes);
printf("%d Heurs %d Minuts %d Secondes",h,min,sec);
getchar();
return 0;
}
Hors ligne Ghost_anon # Posté le 15/02/2012 à 16:26:04
Avatar

Avis : Très bon

bon, j'avoue, que ce chapitre est très lourd à digérer.

mais on as un super professeur !!! :D

j'ai raté la dernière question du QCM, je me posait justement la question avant de le commencer, et la réponse me paraît assez logique en fait ^^

j'ai réussi le problème donc voici mon code pour ceux que cela pourrait intéressé. j'y ai intégré des printf en plus, car cela m'as beaucoup aidé pour comprendre le fonctionnement des pointeurs.

vous remarquerez sans doute que ma fonction n'est pas dans le main. Et oui, je m'entraînais en même temps sur la programmation modulaire :D
je la post à la suite du code main.

voici mon code :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <stdlib.h>
#include "fonctions.h"

int main(int argc, char *argv[])
{
            ////declarations des variables ////
    int heures = 0, minutes = 90 ;
    int *pointeurHeures = NULL, *pointeurMinutes = NULL;

    pointeurHeures = &heures, pointeurMinutes = &minutes;

                     ////fonction decoupe minutes///
    decoupeMinutes( pointeurHeures , pointeurMinutes );

         //// retour dans main apres la fonction plus affichage des adresses////
    printf ("\n\n contenu du pointeur heures en chiffres est : %d", pointeurHeures);
    printf ("\n\n contenu du pointeur minutes en chiffres est : %d", pointeurMinutes);
    printf ("\n\n l'adresse memoire de heures en chiffres est : %d", &heures);
    printf ("\n\n l'adresse memoire de minutes en chiffres est : %d", &minutes);
    printf ("\n\n adresse memoire de heures en hexa : %p", &heures);
    printf ("\n\n adresse memoire de minutes en hexa : %p", &minutes);


    printf ("\n\n valeur de la variable indiquee par le pointeur heures : %d ", *pointeurHeures);
    printf ("\n\n valeur de la variable indiquee par le pointeur minutes : %d ", *pointeurMinutes);
    printf ("\n\n adresse memoire du pointeur heures : %p", &pointeurHeures );
    printf ("\n\n adresse memoire du pointeur minutes : %p", &pointeurMinutes);
    printf ("\n\n contenu de la variable heures : %d ", heures);
    printf ("\n\n contenu de la variable minutes : %d \n\n", minutes);
    printf ("\n\n %d heures et %d minutes \n\n",heures ,minutes);
    return 0;
}



ma fonction maintenant :

Code : C
1
2
3
4
5
void decoupeMinutes( int *h, int *m )
  {
      *h = *m / 60;
      *m = *m % 60;
  }


voilà, ne pas oublier de créer un fichier.h ( proto de la fonction) que l'on doit déclarer dans main.c

++
Hors ligne Kainak # Posté le 20/02/2012 à 14:39:02

Bonjour, très bon tuto sur le language C, et j'attendais avec impatience cette partie réputée comme très difficile, que je trouve assez clair (c'est surement parce qu'elle est bien expliquée :) )

Mais j'ai du refaire le TP plus ou moins mais avec des fonctions pour bien comprendre l'exemple du début avec la conversion heures minutes que je n'avait pas du tout comprise à ma première lecture >< !

Dans ce TP plus ou moins, j'avais déjà ajouter des options comme : rejouer, niveau de difficulté ou bien compteur de coups.
Et c'est avec le niveau de difficulté que j'ai rencontré le même problème que les heures et minutes. La fonction "niveau de difficulté" doit renvoyer deux valeur : MIN et MAX (pour augmenter l'intervalle du nombre mystère) ce qui n'est pas possible à faire facilement sans les pointeurs.

C'est donc seulement là que j'ai compris l'exemple du début ;). C'était juste pour améliorer le tuto au cas ou, car je ne le trouve pas très clair sur le premier exemple qui lance le chapitre des pointeurs.

Il faudrait (a mon avis de novice) faire quelque chose comme ça :

Code : C
1
2
3
4
5
6
7
void decoupeMinutes(int heures, int minutes)
{
    heures = minutes / 60;  // 90 / 60 = 1
    minutes = minutes % 60; // 90 % 60 = 30 (rappelez-vous : modulo = reste de la division, "90 divisés par 60 font 1, et il reste 30")

    return heures, minutes; //j'ai ajouté un return double (qui ne fonctionne pas bien sûr) pour clarifier le problème
}
Hors ligne joe443 # Posté le 21/02/2012 à 03:36:32
Avatar

Avis : Très bon

Wow, excellent chapitre Mateo ! Les pointeurs m'ont paru beaucoup plus simple que je le pensais avant de débuter le chapitre. J'ai tous compris du premier coup :)

Tutorial suivi (ça ne veut pas dire que je ne connais pas les 0 % ^^ :
HTML5/CSS3...: [IIIIIIIIII]-[60%]====Langage C......: [IIIIIIIIII]-[40%]====GNU/Linux......: [IIIIIIIIII]-[0%]
JavaScript.....: [IIIIIIIIII]-[0%]====Langage C++ ...: [IIIIIIIIII]-[0%]====UNIX ............: [IIIIIIIIII]-[0%]
PHP/mySQL....: [IIIIIIIIII]-[0%]====Python..........: [IIIIIIIIII]-[0%]====Windows........: [IIIIIIIIII]-[0%]
VB .Net.........: [IIIIIIIIII]-[75%]====ASM:............:[IIIIIIIIII]-[0%]
 
Hors ligne Lawliet.L # Posté le 27/02/2012 à 22:06:22
Avatar

Avis : Très bon

ben c'est pas très difficile :p

C : |||||||||| 20%
 
Hors ligne tofe69 # Posté le 06/03/2012 à 22:07:30

#include <stdio.h>
#include <stdlib.h>

static int h, min;

/* Je mets le prototype en haut. Comme c'est un tout
petit programme je ne le mets pas dans un .h, mais
en temps normal (dans un vrai programme) j'aurais placé
le prototype dans un fichier .h bien entendu ;o) */

void decoupeMinutes(int heures, int minutes);

int main(int argc, char *argv[])
{
int heures = 0, minutes = 90;

/* On a une variable minutes qui vaut 90.
Après appel de la fonction, je veux que ma variable
"heures" vaille 1 et que ma variable "minutes" vaille 30 */

decoupeMinutes(heures, minutes);
printf("%d heures + %d minutes = %d heures et %d minutes\n", heures, minutes, h, min);

decoupeMinutes(heures, minutes);
printf("%d heures + %d minutes = %d heures et %d minutes\n", heures, minutes, h, min);

heures =2, minutes = 385;
decoupeMinutes(heures, minutes);
printf("%d heures + %d minutes = %d heures et %d minutes\n", heures, minutes, h, min);

return 0;
}

void decoupeMinutes(int heures, int minutes)
{
min = minutes;
h = heures + min / 60; // 90 / 60 = 1
min = min % 60; // 90 % 60 = 30 (rappelez-vous : modulo = reste de la division, "90 divisés par 60 font 1, et il reste 30")
}

ça fonctionne, merci pour chapitre précèdent!
Mais les pointeurs offrent des solutions bien mieux adaptées et un grand merci aux personnes qui travaillent pour le site du zéro afin de rendre la programmation accessible à tous grâce à la clarté de leurs tutoriels.
GRAND MERCI A VOUS ET VIVE LE ZERO !!!!
Hors ligne tofe69 # Posté le 06/03/2012 à 22:20:24

Au fait excusez moi, je n'ai pas modifié les commentaires du fichier que j'ai collé. Donc les commentaires ne sont pas forcément bons car j'ai collé et modifié le fichier d'un grand pédagogue qu'est Matéo (j'espère j'ai pas écorché ton nom, loin d'être sûr, désolé) et encore félicitations à lui
Hors ligne Claire Waterlot # Posté le 18/03/2012 à 15:14:32
Avatar

Avis : Bon

bonjour,

j'ai un peu de mal a comprendre la difference entre static (int variable) et les pointeurs.

dans le chapitre 10 programmation modulaire: variable statique d'une fonction
il y a un exemple avec une fonction int ou qd on met static devant la variable celle ci ne ce supprime pas. on réutilise la variable créer précédemment.

on pourrait pas l utiliser pour le probleme poser dans ce chapitre 11 avec 90 min pour devenir 1h 30 ???
Hors ligne anonyme # Posté le 21/03/2012 à 23:11:52

Bonjour Claire,

Je vais essayer d'apporter une réponse à votre confusion entre les variables de type pointeur et les variables de classe static

Citation : Claire Waterlot
bonjour,

j'ai un peu de mal a comprendre la difference entre static (int variable) et les pointeurs.

dans le chapitre 10 programmation modulaire: variable statique d'une fonction
il y a un exemple avec une fonction int ou qd on met static devant la variable celle ci ne ce supprime pas. on réutilise la variable créer précédemment.

on pourrait pas l utiliser pour le probleme poser dans ce chapitre 11 avec 90 min pour devenir 1h 30 ???


Les pointeurs:

Lorsque l'on veut transmettre une valeur à une fonction en utilisant une variable, nous avons 2 possibilités de transmettre l'information.

1- on transmet la valeur de la variable
2- on transmet la référence de la variable

Il y'a une énorme différence dans le traitement de l'information entre ces deux possibilitées.

1) Prenons un exemple, transmission par valeur:

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

void maFonction (int i);

int main (int argc, const char *argv[]) {
	int i = 0;
	maFonction(i); /* ici c'est la valeur qu'on envoie */
	printf("main => %d", i);
	return 0;
}

void maFonction (int i) {
	int x;
	for (x = 0; x < 6; x++) {
		printf("mafonction i => %d\n", i);
		i++;
	}	
}


2) Même exemple mais cette fois si la transmission se fait par référence:

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

void maFonction (int *i);

int main (int argc, const char *argv[]) {
	int i = 0;
	maFonction(&i); /* ici c'est la référence, l'adresse mémoire */
	printf("main => %d", i);
	return 0;
}

void maFonction (int *i) {
	int x;
	for (x = 0; x < 6; x++) {
		printf("mafonction i => %d\n", *i);
		(*i)++;
	}	
}


Comparons les résultats obtenus:

Par valeur Par référence
mafonction i => 0 mafonction i => 0
mafonction i => 1 mafonction i => 1
mafonction i => 2 mafonction i => 2
mafonction i => 3 mafonction i => 3
mafonction i => 4 mafonction i => 4
mafonction i => 5 mafonction i => 5
main => 0 main => 6

Le premier code mafonction à simplement donné la valeur de i à sa variable i puis à incrémenté SA variable i.
Le deuxième code quand à lui à donnée la référence de son i et ainsi mafonction à modifier le i de référence, le i du main.

N'oubliez pas les deux opérateurs d'un pointeur: * et &
* affiche la valeur à laquel il fait référence.
& affiche la référence

Prenons un exemple non concret
donc *i affiche 2 (la valeur) par exemple
et &i affiche 0x004 (l'adresse mémoire, en gros la référence)


Les variables de classe static:

1) Prenons un exemple une variable i de type int (Non static):
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>

void maFonction (void);

int main (int argc, const char *argv[]) {
	int x;
	for (x = 0; x < 6; x++) {
		maFonction();
	}
	return 0;
}

void maFonction (void) {
	int i = 0;
	printf("i => %d\n", i);
	i++; /* on incrémente i */
}

2) Maintenant nous déclarons i comme static:
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>

void maFonction (void);

int main (int argc, const char *argv[]) {
	int x;
	for (x = 0; x < 6; x++) {
		maFonction();
	}
	return 0;
}

void maFonction (void) {
	static int i = 0; /* on peut aussi écrire "static int i" il n'est pas nécessaire d'initialiser une static à 0 */
	printf("i => %d\n", i);
	i++; /* on incrément i */
}

Comparons les résultats obtenus:
non static static
0 0
0 1
0 2
0 3
0 4
0 5

Le premier code à systématiquement ré-initialisé la variable i à 0 sans conserver en mémoire l'incrémentation que nous y fessions (i++;)
Alors que le deuxième code lui à conservé en mémoire la variable i de tel sorte qu'à l'appel suivant de la fonction, i a conservé sa valeur.

Mais là encore le i de maFonction n'existe QUE dans maFonction.

Pardonnez mes fautes orthographique je ne suis pas vraiment littéraire ^^

Cordialement,
Hors ligne Jérémy Litaize # Posté le 26/03/2012 à 12:09:16

Pour reprendre la question de Claire, et par rapport à la réponse donnée, je me demandais pourquoi utiliser les pointeurs alors que l'on peut résoudre le problème en utilisant une variable globale ?

Si quelqu'un pouvait m'éclaircir à ce sujet...

Merci d'avance
Hors ligne Claire Waterlot # Posté le 06/04/2012 à 18:34:36
Avatar

Avis : Bon

bonjour,

encore une question.
est ce qu'on peut mettre un pointeur dans une fonction int? ou ca sert a rien???

merci de votre réponse
Hors ligne anonyme # Posté le 07/04/2012 à 10:09:47

Bonjour Jérémy Litaize

Il vous est tout à fait possible de faire une variable globale et non un pointeur pour faire la même chose.
Si sur un code d'une dizaine de ligne ça ne pose pas de problème en revanche sur un code source de plusieurs centaine de ligne cela peu poser problème. Il faudrait être sûr est certain de ne pas utiliser 2 fois le même nom de variable.

Il n'est pas faux d'utiliser une variable global sur un programme mono-fichier de type main.c, mais ça n'est pas du tout conventionnel, la règle veut que les variables de type global (ou variable Externe) soient utilisé avec modération. Je ne vous parlerais pas des problèmes rencontré avec des programmes codé sur plusieurs fichier.c et pas uniquement main.c


Bonjour Claire Waterlot

Je ne sais pas si j'ai bien compris la question, mais oui vous pouvez tout à fais prendre un pointer comme paramètre à une fonction de type int.
Voici un exemple
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>

int myFunction (int *x, int *y);

int main (int argc, const char *argv[]) {
	int x = 0;
	int y = 3;
	
	printf("Avant myFunction\n");
	
	printf(" x -> %d\n", x);
	printf(" y -> %d\n\n", y);
	
	printf("Appel de myFunction\n");
	printf("a -> %d\n", myFunction(&x, &y));
	
	printf("\nAprès myFunction\n");

	printf(" x -> %d\n", x);
	printf(" y -> %d\n", y);
	
	return 0;
}

int myFunction (int *x, int *y) {
	int a = 0;
	
	if ((*x) < 1) { (*x)++; }
	if ((*y) > 2) { (*y)--; }
	
	a = (*x) + (*y);
	
	return a;
}
Hors ligne Olivier Vermeulen # Posté le 13/04/2012 à 18:50:00

Petite question :

Est-il possible d'imposer une adresse à une variable ?? Car il est bien facile d'aller la retrouver par après, mais l'imposer ??
De choisir par exemple que l'adresse de la variable "age" soir la 56948 ?? (peut être imposer comme ceci : &age = 56948 ?? :-) )

Merci beaucoup !!
Hors ligne Gioani-xX # Posté le 21/04/2012 à 22:15:03
Avatar

Avis : Très bon

3 approches et je maîtrise enfin les pointeurs. (:
Hors ligne Claire Waterlot # Posté le 22/04/2012 à 09:29:02
Avatar

Avis : Bon

merci pour ta réponse ^^
Hors ligne Sebastien Bequignon # Posté le 23/04/2012 à 22:52:32
Avatar

Avis : Très bon

C'est un excellent tuto.
Olivier : oui c'est "techniquement faisable" mais vraiment déconseiller car tu risque de pointer vers une adresse déjà utilisé par un autre programme, voir utilisé par le système lui même et donc tu plantera ton pc
Pour accéder à cette section
Connectez-vous !
connexion_rpx