Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1268 connectés 

  FORUM HardWare.fr
  Programmation
  C

  question sur les pointeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

question sur les pointeurs

n°1565972
in_your_ph​ion
Posté le 27-05-2007 à 22:11:17  profilanswer
 

bonjour,

 

j'aimerai savoir si

 
Code :
  1. int a = 1;


est la même chose que

Code :
  1. int * const b = &a;
 

sinon j'ai une petite autre question sur les pointeurs :whistle:

 

est ce que

 
Code :
  1. int **a = (int **)malloc(sizeof(int*)*10 );
 

est pareil que :

 
Code :
  1. int *b[10];
 

en fait, j'aimerai savoir si **a et *b[] écrivent au meme endroit, car dans l'un c'est la notation pointeur et dans l'autre la notation tableau. Or, je crois que les taleaux et les pointeurs n'ecrivent pas au meme endroit (heap/Stack) ??

 

merci par avance  :jap:

 


Message édité par in_your_phion le 27-05-2007 à 22:13:22
mood
Publicité
Posté le 27-05-2007 à 22:11:17  profilanswer
 

n°1566080
nORKy
Grmmph...
Posté le 28-05-2007 à 11:53:44  profilanswer
 

Une adresse est une adresse. Derriere tous les type se cache uniqument une adresse, n'oublie pas ca.
tu peux donc faire si ca te chante int *b = &a; et donc *b et a auront toujours la meme valeur que tu auras affecté puisque b pointe sur la meme adresse ou a été alloué statiquement a.
 
En effet déclarer un tableau est une allocation statique -> créé à l'exécution du programme dans son segement data.
Malloc lui alloue dans le tas du programme.

n°1566106
matafan
Posté le 28-05-2007 à 12:41:33  profilanswer
 

int * const b = &a; ça définit un pointeur qui pointera toujours vers a. Par contre je ne dirais pas que c'est la "même chose", dans la mesure ou a est un int et que b reste un pointeur... La syntaxe sera évidemment différente pour accéder au "1".
 
Pour l'autre question : non c'est pas pareil. sizeof a et sizeof b par exemple ne donneront pas la même chose. Aussi b pourrait être défini au niveau global, alors que a ne peut l'être que dans une fonction. D'ailleurs suivant l'endroit ou b est déclaré (global ou dans une fonction mais pas static), la mémoire ne sera pas alloué au même endroit.

n°1566267
in_your_ph​ion
Posté le 28-05-2007 à 16:27:27  profilanswer
 

matafan a écrit :

int * const b = &a; ça définit un pointeur qui pointera toujours vers a. Par contre je ne dirais pas que c'est la "même chose", dans la mesure ou a est un int et que b reste un pointeur... La syntaxe sera évidemment différente pour accéder au "1".
 
Pour l'autre question : non c'est pas pareil. sizeof a et sizeof b par exemple ne donneront pas la même chose. Aussi b pourrait être défini au niveau global, alors que a ne peut l'être que dans une fonction. D'ailleurs suivant l'endroit ou b est déclaré (global ou dans une fonction mais pas static), la mémoire ne sera pas alloué au même endroit.


 
 
salut  :hello:  
 
 
merci pour vos réponses. Je ne suis pas sur de comprendre pas la réponse du deux....est ce que dans ce cas :
 

Code :
  1. int main (int argc, char **argv)


 
n'est pas pareil que  
 

Code :
  1. int main (int argc, char *argv[])


 
?
 
Sauriez vous ou je peux trouver de la doc sur le tas et la pile ?  :sweat:  
 
 
merci encore  

n°1566535
nORKy
Grmmph...
Posté le 29-05-2007 à 10:11:16  profilanswer
 

Par contre, j'ai un doute sur une chose.
soit ce code :

Code :
  1. char *av[10];
  2. int myfunc(int a, char *zz[10]) {
  3. ...


 
av et zz ne sont pas réservé au même endroit.
zz se trouve dans la pile, et av dans le segment data (ou ailleurs selon des cas que je ne connais pas) du programme.
 
Par contre, si on en précise pas la taille du tableau (*arg[]) pas sur que ca ne soit pas pareil que (**argv)
 
En gros, ca nous fait 3 pour 3 types d'allocation (statique, dans la pile, dans le tas)
Pour la doc, tu devrais chercher de la doc sur ELF, pt etre que ca t'aidera.
 
EDIt : j'avais inversé mes 2 lignes de code, ce qui change tous à mon explication !


Message édité par nORKy le 29-05-2007 à 10:23:48
n°1566563
matafan
Posté le 29-05-2007 à 11:00:03  profilanswer
 

zz ne se trouve nul part... C'est juste un argument de ta fonction. Quand on appelle ta fonction, ce qui est passé en deuxième argument c'est juste une adresse (l'adresse du premier élément du tableau), pas tout le tableau. La valeur de cette adresse dépend de comment est définit le tableau au niveau de l'appelant, pas de la façon dont est déclarée ta fonction myfunc. Le fait que tu donnes la taille du tableau dans ton prototype ne change rien au fait que le tableau est passé par référence.

n°1567338
nORKy
Grmmph...
Posté le 30-05-2007 à 15:52:01  profilanswer
 

matafan a écrit :

zz ne se trouve nul part... C'est juste un argument de ta fonction. Quand on appelle ta fonction, ce qui est passé en deuxième argument c'est juste une adresse (l'adresse du premier élément du tableau), pas tout le tableau. La valeur de cette adresse dépend de comment est définit le tableau au niveau de l'appelant, pas de la façon dont est déclarée ta fonction myfunc. Le fait que tu donnes la taille du tableau dans ton prototype ne change rien au fait que le tableau est passé par référence.


 
Tous se trouve qq part  :pt1cable:  
Biensur que zz est une référence un pointeur, mais la zone mémoire ou est ce pointeur est dans la pile.
Tous les paramètre de la fonction sont empiler dans la pile (en partant du dernier je crois).
Mais le int a aura bien ses 4 octets (taille du int) dans la pile et cette zone sera remplis avec la valeur passée en paramètre.
Normal, puisque lorsqu'on sors de la fonctionne, tous les paramètres sont dépiler et donc on perd la zone mémoire des paramètres.


Message édité par nORKy le 30-05-2007 à 15:52:33
n°1567620
matafan
Posté le 31-05-2007 à 08:25:46  profilanswer
 

Je croyais que tu parlais de ce qui est pointé par zz, pas de zz lui même. Du coup la question n'a pas grand intéret...
 
D'ailleurs quand tu dis qu'il est dans la pile, ce n'est pas forcément vrai. Sur certaines architecture (Power par exemple), les arguments sont passés dans des registres. Si tu ne compiles pas avec -g et si la fonction n'a pas besoin de manipuler l'adresse de cet argument, il n'est pas écrit dans la pile du tout.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  question sur les pointeurs

 

Sujets relatifs
Question sur les pointeurs...[Madame Bellepaire, Loches][c++] question bête sur les pointeurs
Question pointeurs[PHP] Question POO / pointeurs [résolu- presque]
petite question de logique sur les pointeursQuestion sur les pointeurs...
Pointeurs sur fonctions (question pointue !)petite question sur les pointeurs
[C] Petite question sur les pointeurs deux étoiles qui se suivent[C++] Question sur les pointeurs, aidez moi à comprendre svp !
Plus de sujets relatifs à : question sur les pointeurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR