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

  FORUM HardWare.fr
  Programmation
  C

  Petit problème de compréhension dans un passage de paramètre...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Petit problème de compréhension dans un passage de paramètre...

n°491292
neo9205
Posté le 19-08-2003 à 15:32:30  profilanswer
 

:hello:  
J'ai une partie d'un programme (qui vient d'un livre de C) que j'ai trouvé et dans lequel il y a un petit élément que je ne comprend pas :
 
En global on a :
struct livre4
{
    char nom[21];
    ...
 
};
Dans le main() :
 
main()
{
struct livre4 *blist=null;
if((blist=(struct livre4 *)realloc(blist,(i+1)*sizeof(struct livre4)))==null)
{
 handle_error();
 break;
}
printf("%d",i+1);
readstruct(&blist[i]);
i++;
 
}
 
Fonction readstruct :
void readstruct(struct livre4 *b)
{
 
...
 
}
 
Pourquoi quand on fait appel à la fonction readstruct(), on lui donne en parametre &blist[i] alors que blist est un pointeur tout simple vers une structure...et non un tableau de pointeur comme je le comprend moi dans ce passage de paramètre.En effet, il y a indexation comme pour les tableaux.A moins que dans le livre, ils se soient gourrés et qu'il faut déclarer un tableau de pointeurs vers structures.
 
Merci d'avance pour votre aide  :sol:


Message édité par neo9205 le 19-08-2003 à 20:21:47
mood
Publicité
Posté le 19-08-2003 à 15:32:30  profilanswer
 

n°491296
El_gringo
Posté le 19-08-2003 à 15:35:48  profilanswer
 

A cause du realloc, blist est un pointeur vers un tableau d'éléments de type "struct livre4".
&blist[i] est alors l'adresse du i ème élément du tableau.

n°491299
LetoII
Le dormeur doit se réveiller
Posté le 19-08-2003 à 15:37:21  profilanswer
 

Alors ton bou de code fait de l'allocation dynamique sur un tableau de structure. blist pointe sur le premier élément de ce tableau. blist[i] est donc le ieme élément. &blist[i] l'adresse de ce ieme élément.


---------------
Le Tyran
n°491305
neo9205
Posté le 19-08-2003 à 15:38:49  profilanswer
 

El_gringo a écrit :

A cause du realloc, blist est un pointeur vers un tableau d'éléments de type "struct livre4".
&blist[i] est alors l'adresse du i ème élément du tableau.


 
Ah oki merci, j'étais sur le point de me mefier du realloc  :pt1cable:

n°491309
neo9205
Posté le 19-08-2003 à 15:41:04  profilanswer
 

LetoII a écrit :

Alors ton bou de code fait de l'allocation dynamique sur un tableau de structure. blist pointe sur le premier élément de ce tableau. blist[i] est donc le ieme élément. &blist[i] l'adresse de ce ieme élément.


 
Ok merci  :hello:

n°491326
neo9205
Posté le 19-08-2003 à 15:48:11  profilanswer
 

On peut donc dire que realloc change le type de blist ?
 
On n'a ainsi pas besoin d'écrire struct livre4 *blist[nombre de pointeurs voulus].
 
Quand on veut gérer en dynamique on passe par realloc directement tout en déclarant un pointeur tout simple si j'ai bien compris ?

n°491329
LetoII
Le dormeur doit se réveiller
Posté le 19-08-2003 à 15:49:50  profilanswer
 

neo9205 a écrit :

On peut donc dire que realloc change le type de blist ?
 
On n'a ainsi pas besoin d'écrire struct livre4 *blist[nombre de pointeurs voulus].
 
Quand on veut gérer en dynamique on passe par realloc directement tout en déclarant un pointeur tout simple si j'ai bien compris ?


 
 :non:  
Realloc ne change rien du tout, realloc ne fait qu'allouer de la mémoire.


---------------
Le Tyran
n°491333
neo9205
Posté le 19-08-2003 à 15:52:15  profilanswer
 

LetoII a écrit :


 
 :non:  
Realloc ne change rien du tout, realloc ne fait qu'allouer de la mémoire.


 
Oui d'accord, mais n'empeche que si on aurait utilisé malloc, on aurait écrasé à chaque fois blist sans pouvoir je pense écrire blist[i] plus tard dans le passage de paramètre.

n°491339
LetoII
Le dormeur doit se réveiller
Posté le 19-08-2003 à 15:57:42  profilanswer
 

neo9205 a écrit :


 
Oui d'accord, mais n'empeche que si on aurait utilisé malloc, on aurait écrasé à chaque fois blist sans pouvoir je pense écrire blist[i] plus tard dans le passage de paramètre.


 
 :heink:  
 
Révise les pointeurs toi


---------------
Le Tyran
n°491342
El_gringo
Posté le 19-08-2003 à 15:59:14  profilanswer
 

neo9205 a écrit :


 
Oui d'accord, mais n'empeche que si on aurait utilisé malloc, on aurait écrasé à chaque fois blist sans pouvoir je pense écrire blist[i] plus tard dans le passage de paramètre.


 
si on AVAIT utilisé...
 
Là n'est pas la question, realloc, malloc ou calloc on s'en fout.
Juste, realloc comme il est utilisé ici, réserve i+1 fois la taille d'un structure "livre4" à l'adresse pointée par blist.
On peut donc utiliser blist comme un tableau de i+1 éléments.
Tu sais que quand on fait :
struct livre4 mesLivres[100];
mesLivres est un pointeur de type "* struct livre4" sur la tableau ?
c à dire que mesLivres[a] <=> (mesLivres+a)
Ben on se retrouve dans le même style de cas avec ton blist...

mood
Publicité
Posté le 19-08-2003 à 15:59:14  profilanswer
 

n°491351
Taz
bisounours-codeur
Posté le 19-08-2003 à 16:04:35  profilanswer
 

struct livre4 *blist;
if((blist=(struct livre4 *)realloc(blist,(i+1)*sizeof(struct livre4)))==null)  
 
boom, à moins d'avoir de la chance 1 sur 4294967296
 
sans parler du "null" .... je le sens pas terrible ce topic

n°491429
El_gringo
Posté le 19-08-2003 à 16:46:45  profilanswer
 

Taz a écrit :

struct livre4 *blist;
if((blist=(struct livre4 *)realloc(blist,(i+1)*sizeof(struct livre4)))==null)  
 
boom, à moins d'avoir de la chance 1 sur 4294967296
 
sans parler du "null" .... je le sens pas terrible ce topic
 


 
Depuis ton intervention, moi non plus !
Tu peux pas lui expliquer pourquoi au lieu de lui dire que ça va cracher ?

n°491435
LetoII
Le dormeur doit se réveiller
Posté le 19-08-2003 à 16:49:19  profilanswer
 

El_gringo a écrit :


 
Depuis ton intervention, moi non plus !
Tu peux pas lui expliquer pourquoi au lieu de lui dire que ça va cracher ?


S'il expliquait ce serait pas taz voyons ;) :o


---------------
Le Tyran
n°491601
Taz
bisounours-codeur
Posté le 19-08-2003 à 19:26:55  profilanswer
 

euh pointeur pas initialisé... ça vous dis quelque chose? c'est bien la peine de faire les cakes avec realloc si on sait pas s'en servir

n°491652
neo9205
Posté le 19-08-2003 à 20:20:33  profilanswer
 

Taz a écrit :

euh pointeur pas initialisé... ça vous dis quelque chose? c'est bien la peine de faire les cakes avec realloc si on sait pas s'en servir


 
-Primo ça vient d'un livre et non de moi (de meme pour l'erreur).
-Secondo l'initialisation est dans le livre mais je l'ai enlevé car c'est pas le problème dont il est question dans le topic et de plus ça allège le code pour discuter dessus.

n°491657
Taz
bisounours-codeur
Posté le 19-08-2003 à 20:26:09  profilanswer
 

enlève les virgules en fin de ligne : ça allège et ça t'évitera de faire des conneries... en attendant, si tu pouvais ecouter ce que je t'ai dit, ça résoudrait ton problème.

n°491696
neo9205
Posté le 19-08-2003 à 20:55:08  profilanswer
 

Taz a écrit :

enlève les virgules en fin de ligne : ça allège et ça t'évitera de faire des conneries... en attendant, si tu pouvais ecouter ce que je t'ai dit, ça résoudrait ton problème.  


 
Mon problème n'était pas une initialisation de pointeur !Cette initialisation de pointeur, dans mon prog sur mon PC elle y a toujours été.

n°491703
Taz
bisounours-codeur
Posté le 19-08-2003 à 20:59:34  profilanswer
 

et tu l'iniatiles comment juste pour savoir?
 
elg est dans le décors sur ce topic (moi je trolle sur les topics java, je dis pas des bêtises grosses comme moi)
 
tu prends ton K&R et hop, chapitre sur les pointeurs    [:spamafote]

n°491715
neo9205
Posté le 19-08-2003 à 21:08:42  profilanswer
 

Taz a écrit :

et tu l'iniatiles comment juste pour savoir?
 
elg est dans le décors sur ce topic (moi je trolle sur les topics java, je dis pas des bêtises grosses comme moi)
 
tu prends ton K&R et hop, chapitre sur les pointeurs    [:spamafote]  


 
Je l'initialise comme ceci:
struct livre4 *blist=NULL;
 
Quand au chapitre pointeur, je l'ai passé dans tous les sens y a 4 jours et je pense quand meme que c'est ok maintenant:  
 
Il s'agit juste de cas particuliers lors d'allocation dynamique sur des structures par exemple.

n°491954
leneuf22
Posté le 20-08-2003 à 00:26:27  profilanswer
 

Code :
  1. void *realloc(void *ptr, size_t size);


 
Taz> If ptr is a null pointer, the realloc function behaves like the malloc function for the specified size.

n°492051
Taz
bisounours-codeur
Posté le 20-08-2003 à 07:17:47  profilanswer
 

ben mosieur a tout édité, et puis je sais pas ou il compte allé avec ses null ... pour ceux qui aurait pas remarqué, NULL est une macro en C

n°492058
VisualC++
J'va y penser ...
Posté le 20-08-2003 à 08:04:28  profilanswer
 

Bah tu le fait pour C et C++ la macro spa grave  
 

Code :
  1. #ifndef NULL
  2. #ifdef  __cplusplus
  3. #define NULL    0
  4. #else
  5. #define NULL    ((void *)0)
  6. #endif
  7. #endif


n°492062
Taz
bisounours-codeur
Posté le 20-08-2003 à 08:16:28  profilanswer
 

euh en C++, la valeur "pas d'adresse" d'un pointeur est canoniquement 0.
 
par contre en C, ça peut varier. y a le cast, mais ça peut être autre chose que 0 (je me souviens plus, mais j'ai déjà vu ça)
 
 
et puis il sert à quoi ton post? c'est neo qui ecrit du null à tout va ...


Message édité par Taz le 20-08-2003 à 08:17:14
n°492074
El_gringo
Posté le 20-08-2003 à 08:39:51  profilanswer
 

Taz a écrit :


elg est dans le décors sur ce topic (moi je trolle sur les topics java, je dis pas des bêtises grosses comme moi)  


 
Heuuu... c'est quoi c't'agression !?
J'crois que j'ai répondu a sa question initiale, MOI !

n°492076
LetoII
Le dormeur doit se réveiller
Posté le 20-08-2003 à 08:42:59  profilanswer
 

El_gringo a écrit :


 
Heuuu... c'est quoi c't'agression !?
J'crois que j'ai répondu a sa question initiale, MOI !


 
El_gringo VS Taz
round 1
fight!
 
 [:magicpanda]  
 
 [:ddr555]  
 
Calmez vous, ça vaut pas le coup de se foutre sur la gueule pour un topic de ce genre.


---------------
Le Tyran
n°492090
Taz
bisounours-codeur
Posté le 20-08-2003 à 09:01:58  profilanswer
 

pétant de rire [:rofl], j'ai un client qui s'appelle "Le Scanf"

mood
Publicité
Posté le   profilanswer
 


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

  Petit problème de compréhension dans un passage de paramètre...

 

Sujets relatifs
Probleme dans <input type=text>....Probleme avec AUTO_INCREMENT
[mySQL] probléme avec addslashesJe n'y connais rien, juste ajouter un petit lien
[directx ] probleme de débutant avec D3DXVECTOR3[CVI-NiDaq] Probleme d'edition de lien ......
Pages php probleme d'énorme lenteur avec IE[DELPHI] Problème pour une erreur que je n'arrive pas à résoudre
Problème avec Header...Problème fseek()
Plus de sujets relatifs à : Petit problème de compréhension dans un passage de paramètre...


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