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

pointeur en C

scorpio5]]
scorpio5]]
Niveau 2
21 juin 2007 à 06:58:34

bonjour tous le monde,
J´ai un problème j´appren en ce moment le C/C++ mais bon la je suis au pointeur et je comprend pas à quoi sa sert et se que c´est.
vous pouvez m´expliqué
:merci:

godrik
godrik
Niveau 30
21 juin 2007 à 09:28:39

Les pointeurs servent a plein de chose...

En particulier, ca sert lors d´appel de fonction.
Quand tu appele une fonctoin avec des parametre, les parametres sont recopié vers la nouvelle fonction. Donc si tu les modifies dans cette fonction elles ne seront pas modifié dans la fonction appelante. Demo

void toto(int a)
{a=2;}

int main ()
{
int tutu=3;
toto(tutu);
printf ("%d\n", tutu); // affiche 3 et pas 2
return 0;
}

alors que si tu passe l´adresse d´une variable, c´est l´adresse qui sera recopié lors de l´appel de fonction. Donc tu pourra modifié ce qui est a l´adresse donné et donc bien modifier ce que tu veux. Demo:

void toto(int *a)
{*a=2;}

int main ()
{
int tutu=3;
toto(&tutu);
printf ("%d\n", tutu); // affiche 2 maintenant
return 0;
}

Fvirtman
Fvirtman
Niveau 10
21 juin 2007 à 10:03:11

Si tu fais l´analogie avec le web :

Tu as par exemple des grosses structures, et des pointeurs vers ces structures.

En web : ça donne des gros sites web, et les pointeurs sont juste l´URL...

Quand tu donnes un site a quelqu´un, soit tu lui donnes une copie entiere du site (tiens, prend tes 2 Go dans ta boite mail...) soit un pointeur vers le site (une URL) -> 30 octets...

Rentabilité...

offspring182
offspring182
Niveau 10
26 juin 2007 à 01:27:37

Les pointeurs... héhé... en clair, une variable de type pointeur contient l´adresse d´une case mémoire donnée (elle pointe vers cette case mémoire).

Un tel mécanisme te permet de modifier des données plus facilement lors de l´appel d´une fonction (enfin, différement qu´un paramètrage par adresse on va dire...), et ça permet pas mal d´autres choses: réservation dynamique de la mémoire (c´est assez kiffant les tableaux de pointeurs d´entiers avec mallocage à gogo, m´enfin bref T_T), c´est également une chose essentielle à l´utilisation des listes chainées (euh, des pointeurs structures récursives O_ô ?) ...

Enfin euh voilà, erf, j´sui pas d´un grand secour :s

Tenguryu
Tenguryu
Niveau 10
26 juin 2007 à 12:43:53

offspring :d) Disons qu´on comprend si on sait déja ce que c´est que des pointeurs :gni:

J´aime bien l´exemple de fvirtman

:)

vexover
vexover
Niveau 9
26 juin 2007 à 19:23:44

J´ai une question sur le pointeurs, Imaginons que je veuille faire une fonction d´initialisation de surfaces et autres ( via la SDL par exemple ), je suis donc obligé de faire mes initilisations avec des pointeurs ? C´est un peu chiant à utiliser pour le reste du programme non ? il n´y a pas d´autres moyens ?

vexover
vexover
Niveau 9
26 juin 2007 à 19:25:32

Enfin, petite rectification, de toute façon les surfaces sont déjà des pointeurs, mais pour les coordonnees par exemple ?

dnob700
dnob700
Niveau 10
26 juin 2007 à 20:25:51

pas forcément. Regarde par exemple la fonction Rect de ce morceau du tuto de JYY :
http://perso.numericable.fr/~fvirtman/info/tuto/2_B_01_chutelibre.cpp

vexover
vexover
Niveau 9
26 juin 2007 à 23:52:16

Merci pour le tuto, mais imaginons qu´il faille que j´initialise plusieurs choses en une seule fonction, je ne peux retourner qu´une seul valeur via cette fonction non ? alors comment est-ce possible ?

Fvirtman
Fvirtman
Niveau 10
27 juin 2007 à 00:33:14

"mais imaginons qu´il faille que j´initialise plusieurs choses "

--> bonne question :)
Tu peux passer des variables qui modifieront l´appelant : une adresse (philosophie C), ou une référence (philosophie C++)

exemple 1 (passage par adresse : philosophie C) :

void fonc(int* a,int* b,int* c)
{

  • a = 6;
  • b = 7;
  • c = 8;

}

int main()
{
int a,b,c;
a=b=c = 0;
fonc(&a,&b,&c);
// ici, a=6, b=7, c=8 : 3 valeurs "retournées"
...
}

exemple 1 (passage par reference: philosophie C++) :

void fonc(int& a,int& b,int& c)
{
a = 6;
b = 7;
c = 8;
}

int main()
{
int a,b,c;
a=b=c = 0;
fonc(a,b,c);
// ici, a=6, b=7, c=8 : 3 valeurs "retournées"
...
}

vexover
vexover
Niveau 9
27 juin 2007 à 12:19:54

Merci de tes explications, mais j´ai encore quelques questions ( Moi, chiant ? ), Le type void n´est-il pas réservé aux fonctions sans paramètres ? Et, enfaite je ne pourrais pas réutiliser ton exemple (Je pense avoir compris le principe, mais je n´en suis pas totalement sur, encore un peu de mal avec les pointeurs parfois ), Parce qu´enfaite je deois faire l´initilisations à l´intérieur de la fonction sans utiliser aucun paramètres, par exemple :

void initilisation()
{
SDL_Surface *Ecran = NULL, *Fond = {NULL};
SDL_Rect position[100] = {0};

position[0].x = 0;
position[0].y = 0;

position[1].x = 300;
position[1].y = 400;

Fond = SDL_LoadBMP("Fond.bmp");

SDL_SetColorKey(Fond, SDL_SRCCOLORKEY, SDL_MapRGB(Fond->format, 255, 255, 0));
}

Donc en gros j´aimerais réutiliser les valeurs de "Ecran", de "Fond" et de position .

KeepSmile
KeepSmile
Niveau 4
27 juin 2007 à 12:50:34

Bonjour,

je suis pas sur d´avoir très bien compris, mais étant donnée que tu code en C, tu peux les déclarer en global, je m´explique avec un exemple:

SDL_Surface *Ecran = NULL, *Fond = NULL;
SDL_Rect position[100] = {0};

void initilisation()
{
position[0].x = 0;
position[0].y = 0;

position[1].x = 300;
position[1].y = 400;

Fond = SDL_LoadBMP("Fond.bmp");

SDL_SetColorKey(Fond, SDL_SRCCOLORKEY, SDL_MapRGB(Fond->format, 255, 255, 0));
}

int main(int, char**)
{
initialisation();

// Utilisation de la variable global initialisé
SDL_BlitSurface(Fond, NULL, Ecran, NULL);

return 0;
}

Voilà, j´espère que c´est ce que tu cherchais et tu ai compris.

Fvirtman
Fvirtman
Niveau 10
27 juin 2007 à 13:20:32

vexover > une fonction peut, ou pas, retourner void, qu´elle aie des parametres ou non : pas de restricition la dessus.

tu peux passer tes images a initialiser par adresse ou par référence !

void initilisation(SDL_Surface** Fond)
{
*Fond = SDL_LoadBMP("Fond.bmp");
....

ou alors par référence :

void initilisation(SDL_Surface*& Fond)
{
Fond = SDL_LoadBMP("Fond.bmp");
....

vexover
vexover
Niveau 9
27 juin 2007 à 14:35:02

KeepSmile >> Sauf que les positions ne sont pas réutilisable et c´est bien ça mon problème .

Fvirtman >> Oui, sauf que ces fonctions demandent des paramètres, et moi ce que je voudrais faire c´est une fonction qui s´occupe de toutes les initialisations pour que le code ressemble en gros à ça :

int main()
{
while(1)
{
initilisation();
requetteEvenement();
affichage();
}
}

Fvirtman
Fvirtman
Niveau 10
27 juin 2007 à 14:37:04

Dans ces cas la, fait des variables globales, ou alors une classe (ou structure) avec une instance globale.

vexover
vexover
Niveau 9
27 juin 2007 à 14:41:23

Il me semble avoir vaguement entendu parlé des variables globales, elle sont aussi appelés variables statics non ?
Quelqu´un aurait-il quelques précisions sur celles-ci ?

Ps : En tout cas merce beaucoups de votre aide, et dsl d´être aussi insistant ^^.

vexover
vexover
Niveau 9
27 juin 2007 à 14:48:38

Après quelques recherche sur wikipédia, j´ai donc compris que la variable global était une variable déclarée en dehors de toutes classes, structures ou fonction ( y compris la main ), et pouvant être utilisé n´importe où dans le code .
Mais je ne peux pas l´utiliser dans mon cas étant donné que j´aimerais faire ça dans une fonction, une méthode de remplacement consisterait donc de mettres ces variable dans un .h et de l´inclure au début du code pour ensuite affecter ces variables au lieu de les initialiser dans la foction prévu à cette effet . est-ce possible ?

KeepSmile
KeepSmile
Niveau 4
27 juin 2007 à 15:11:52

Bonjour,

Tout d´abord, j´aimerai que tu lises les post entièrement et essaie de les comprendre avant de partir n´importe ou.

Pourquoi je dis cela ?, car si tu aurai regardé mon post, tu aurai pu éviter plein de recherche pour rien. Je parlais de variable global et que vois je après :

"Il me semble avoir vaguement entendu parlé des variables globales, elle sont aussi appelés variables statics non ?"

Regarde mon post, et pour te répondre non les variables statics sont différentes des variables globales, du moins syntaxiquement, mais en utilisation c´est vrai que c´est assez ressemblant, mais fait bien la différence entre les deux. Pour plus de précision tu peux aller voir sur le site de FVirtman (cf: va voir sa carte).

"KeepSmile >> Sauf que les positions ne sont pas réutilisable et c´est bien ça mon problème . "

Bien sur que non !, les positions sont déclaré en global donc dans ton main tu peux utiliser les variables initialisé dans la fonction "initialisation()" car elles ne sont pas déclarées dans la fonction "initialisation()" mais en global.

Après pour ta question sur les fichier .h (header), oui en effet tu peux déclarer des variables dedans et inclure ton fichier, mais cela n´a pas vraiment d´utilité dans ton cas, généralement on utilise les fichiers header pour la déclaration de prototype de fonction et structure. (attention les class ne sont pas un concept du langage C mais du langage C++)

Après pour t´aider sur ce que tu veux faire, il nous ferait un peu plus de précision, pour savoir si une structure serait plus adapté ...etc.
Que essaies tu de faire ?

vexover
vexover
Niveau 9
27 juin 2007 à 15:37:57

Arf, oui dsl, j´ai lu ton post un peu distraitement et j´ai pas fait attention aux variable globales et au fait que tu en parlais juste au dessus :honte: , Mea culpa .

Sinon en ce qui concerne ce que je comte faire vraiment, c´est dans l´optique d´un petit jeu de plate-forme, et j´ai prévu d´écrire un editeur de map poure celui-ci, mon objectif pour le moment est donc de charger une map à partir d´un fichier, c´est pour ça que j´ai besoin d´initilialiser à partir d´une fonction : Le programme lit le fichier et l´interprète, au fur et à mesure de la lecture il initialise les surface et positions qui doivent l´être . J´ai mis une partie du code sur un autre topic dont je suis le créateur et qui ne doit pas être bien loin, donc je posterais le code quand il sera un peu plus complet pour vous donner une meilleur idée de ce que je compte faire .
Merci de ton aide .

KeepSmile
KeepSmile
Niveau 4
27 juin 2007 à 15:55:41

Maintenant qu´on voit ce que tu veux faire, ce que tu pourrais être sympa c´est de faire des structures comme:

typedef struct {
int hp;
int mp;
int force;
int defense;
SDL_Surface* image;
} Personnage;

et d´autre structure utile comme pour les monstres ou la map, et après tu fais des fonctions d´initialisation et de traitement sur ces structures.

void chargerCarte(char* filename); // rempli la structure Carte

void initPersonnage(Personnage* perso); // initialise le personnage

regarde sur le site de FVirtman, tu as des exemples de ce type :), et la les fichiers header interviennent ;)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment