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

  FORUM HardWare.fr
  Programmation
  C

  initialisation d'un tableau de pointeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

initialisation d'un tableau de pointeur

n°1918073
ProGrammeH​eure
Posté le 25-08-2009 à 13:40:06  profilanswer
 

Bonjour,
 
Pour me présenté :
Newbies, windows XP, IDE dev c++, programme en c client serveur.
 
voila mon code :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define NombreClient 5
  4. void main (void){
  5.    int* Trame[NombreClient];
  6.    FILE* FichierVideo = NULL;
  7. ...
  8. blablabla
  9. }


 
bon j'ai vu qu'il falait toujours initialisé un pointeur à NULL.
mais dans le cas d'un Tableau de pointeur comment fait-on?

 
j'explique mon code/intention vite fait:  
je souhaite lire un fichier a différent endroit selon le client, et le caractere lu par le client dans une trame qui lui sera envoyée.
ces pointeurs de lecture sont donc les pointeurs contenus dans chaque case du tableau Trame[].
 
si je ne suis pas assez precis, n'hesitez pas à me demander plus d'informaion.
 


---------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
mood
Publicité
Posté le 25-08-2009 à 13:40:06  profilanswer
 

n°1918139
jesus_chri​st
votre nouveau dieu
Posté le 25-08-2009 à 15:42:17  profilanswer
 

Citation :

qu'il falait toujours initialisé un pointeur à NULL.


 
pas toujours, ça dépend de son utilisation. Disons que c'est moins risqué et plus déterministe, mais si tu est sûr de donner une bonne valeur à ton pointeur avant utilisation, pas de problème à ne pas l'initialiser. Si c'était obligatoire, le langage s'en chargerait, comme en Java. Idem pour mettre à NULL après libération, c'est souvent inutile.
 
Le nombre de fois que je vois ça :
 

Code :
  1. Toto::~Toto()
  2. {
  3.     delete m_p;
  4.     m_p = NULL; // inutile puisque l'objet, donc ses membres dont m_p, va disparaître.
  5. }


 
Dans ton cas, si tu veux vraiment mettre les pointeurs à NULL, tu peux faire :

Code :
  1. memset( Trame, NULL, sizeof Trame ); // syntaxe à la C, connue
  2. std::fill_n( Trame, NombreClient, NULL ); // syntaxe à la C++, moins connue mais + propre

n°1918141
Taz
bisounours-codeur
Posté le 25-08-2009 à 15:42:52  profilanswer
 

Pareil que pour initialiser un tableau normal.

n°1918143
Taz
bisounours-codeur
Posté le 25-08-2009 à 15:43:29  profilanswer
 

jesus_christ a écrit :

Citation :

qu'il falait toujours initialisé un pointeur à NULL.

 

pas toujours, ça dépend de son utilisation. Disons que c'est moins risqué et plus déterministe, mais si tu est sûr de donner une bonne valeur à ton pointeur avant utilisation, pas de problème à ne pas l'initialiser. Si c'était obligatoire, le langage s'en chargerait, comme en Java. Idem pour mettre à NULL après libération, c'est souvent inutile.

 

Le nombre de fois que je vois ça :

 
Code :
  1. Toto::~Toto()
  2. {
  3.     delete m_p;
  4.     m_p = NULL; // inutile puisque l'objet, donc ses membres dont m_p, va disparaître.
  5. }
 

Dans ton cas, si tu veux vraiment mettre les pointeurs à NULL, tu peux faire :

Code :
  1. memset( Trame, NULL, sizeof Trame ); // syntaxe à la C, connue
  2. std::fill_n( Trame, NombreClient, NULL ); // syntaxe à la C++, moins connue mais + propre


 

1) on parle C
2) useless memset/fill_n of the week.


Message édité par Taz le 25-08-2009 à 15:43:51
n°1918148
jesus_chri​st
votre nouveau dieu
Posté le 25-08-2009 à 15:46:59  profilanswer
 

1) merde je me croyais dans la section C++
2) ... = { 0 }; ça marche en C ça ? Je dirais oui pour un POD en C++, un tableau en C je suis pas sûr.

n°1918152
ProGrammeH​eure
Posté le 25-08-2009 à 15:51:46  profilanswer
 

merci de répondre mais...
heuu, donc c'est quoi la réponse à ma question au final? :)

n°1918158
Taz
bisounours-codeur
Posté le 25-08-2009 à 15:57:26  profilanswer
 

Un tout simple = { }

n°1918178
ProGrammeH​eure
Posté le 25-08-2009 à 16:25:14  profilanswer
 

merci,
 
donc si je fais un :
int* Trame[NombreClient] = { };
ça marchera? tout les NombreClient pointeurs de mon tableau seront initialisés?

n°1918218
jesus_chri​st
votre nouveau dieu
Posté le 25-08-2009 à 16:57:18  profilanswer
 

ah ben j'ai appris un truc...
Ca marche aussi pour les tableaux non statiques, et c'est concrètement supporté par les compilos ? Ca me semble à la fois légal et obscur comme syntaxe.

n°1918232
ProGrammeH​eure
Posté le 25-08-2009 à 17:08:07  profilanswer
 

effectivement cela semble fonctionner.
merci :)
Resolu! (enfin on ne creusera pas pour savoir pourquoi ça marche)

mood
Publicité
Posté le 25-08-2009 à 17:08:07  profilanswer
 

n°1918251
tpierron
Posté le 25-08-2009 à 17:39:15  profilanswer
 

ProGrammeHeure a écrit :

effectivement cela semble fonctionner.
merci :)
Resolu! (enfin on ne creusera pas pour savoir pourquoi ça marche)


Bah, c'est pas compliqué : les { } sont la syntaxe pour initialiser un tableau. Le C s'attends à des valeurs sépararées par des virgules et s'il manque des valeurs, il y aura un 0 à la place. Ça marche aussi pour les structures d'ailleurs.


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

  initialisation d'un tableau de pointeur

 

Sujets relatifs
centrer un tableau verticalement ?problème d'allocation du tableau
Constructeur Tableau - Merci pour votre aide ! :-)Allocation d'un tableau dans une fonction
[VB/VBA/VBS] Excel - Lien entre Tableau croisé dynamique et celluleExcel/VB - Valeur cellule de ligne + élevée dans tableau
[Résolu] [vba] aide à la syntaxe pour la dimension d'un tableauTableau de pointeurs en c
Affichage des variables d'un tableauUn tableau de liste chaînée
Plus de sujets relatifs à : initialisation d'un tableau de pointeur


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