Tableau de pointeurs en c

Tableau de pointeurs en c - C - Programmation

Marsh Posté le 17-08-2009 à 11:05:41    

Bonjour,
 
Voilà je suis un peu nouveau dans le c, et je ne comprend pas encore toutes les subtilités.
J'aimerai declarer un tableau de pointeur de type float, déjà est ce correct?!
ensuite j'aimerai passer ce tableau de pointeur en parametre dans une fonction permetant d'initialiser tout les pointeurs du tableau à NULL puis par la suite à une autre valeur.
 
en gros je fais ça :
 
#include blablabla
#define NB 10
...
//prototypes
void Initialisation(float fTabPointeur, int inombre);
 
int main (void)
{
   float* fTabPt[NB];
   int inb;// c'est normal nb<NB ne pas tiquer la dessus ^^
 
   Initialisation(*fTabPt, inb);
 
...
}
 
void Initialisation(float* fTabPointeur, int inombre)
{
     int iBoucleInit;// variable de boucle pour l'initialisation des pointeurs
     fTabPointeur=NULL;// celui là je pense qu'il ne sert à rien ?!
 
     for (iBoucleInit = 0 ; iBoucleInit < inombre ; iBoucleInit++)
     {
         fTabPointeur[iBoucleInit]= NULL;
     }      
}
 
j'obtiens une erreur à la compilation :
"incompatible types in assignment" :(  
ps : j'utilise un IDE DevC++ et je suis sous windows.
 
merci, si vous avez un ti exemple ou un conseil. :)  


---------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Reply

Marsh Posté le 17-08-2009 à 11:05:41   

Reply

Marsh Posté le 17-08-2009 à 12:50:26    

Alors...

 

Un pointeur, c'est une variable contenant l'adresse d'une zone mémoire.
Un pointeur ne connait que trois choses : il sait qu'il est un pointeur, il connait une adresse vers le début d'une zone mémoire, et il sait quel type de données il y a dans cette zone mémoire (donc il ne sait même pas combien de données sont stockées dedans).

 

Donc, si tu veux stocker plusieurs float dans un même tableau, tu crées une zone mémoire de la taille adéquate (n * la taille d'un float), et tu stockes son adresse dans un pointeur de float.
Cette opération se fait avec la fonction malloc() (ou calloc() pour procéder à une initialisation à la volée)

 

Ensuite, pour passer le tableau à une fonction, en fait, tu passes l'adresse de ce tableau. Donc, le pointeur.

 

Erreurs :

//prototypes
void Initialisation(float fTabPointeur, int inombre);


=> float *fTabPointeur

 

float* fTabPt[NB];


Ce que tu crées ici est un pointeur sur des tableaux de float. Donc, un tableau à deux dimensions dont le nombre de "colonnes" est fixe (NB) et le nombre de "lignes" variable (dépend du malloc() que tu feras ensuite)

 

Ce que tu veux toi, si j'ai bien compris, c'est juste float *fTabPt.

 

fTabPointeur=NULL;// celui là je pense qu'il ne sert à rien ?!


Servir je ne sais pas, mais comme je le disais en préambule, un pointeur contient l'adresse du début d'une zone mémoire. En passant cette adresse à NULL, tu perds toute référence à ta zone mémoire, tu ne peux plus savoir où elle se trouve.

 


Bon y a encore plein de trucs à dire, mais là ce qu'il te faudrait, c'est un cours complet sur les pointeurs en fait.


Message édité par Elmoricq le 17-08-2009 à 12:50:56
Reply

Marsh Posté le 17-08-2009 à 14:02:57    

merci beaucoup de ta reponse en tout cas :)

Reply

Marsh Posté le 17-08-2009 à 14:22:04    

ce que je veux à terme, c'est en fait, N pointeur pointant sur le début de N fichier (afin d'ecrire dans chacun d'eux), tout ces pointeurs ayant la même fonction je voudrait les mettre dans un tableau, pour pouvoir les utiliser dans une boucle par exemple.
de même je voudrais faire un tableau de pointeur pour la lecture.
un truc du genre:
#define N 8
 
main()
{
int i;
int Trame[N];
float* fTabPt[N];
...
for (i=0; i<N; i++){
     trame [i] = fread (fTabPt[N],255,10,fichier);
}
}
en gros j'ai N gros fichiers en buffer circulaire où je veux écrire et lire en permanence avec un pointeur d'ecriture et un pointeur de lecture.
et je veux regouper les N pointeurs de lecture dans un tableau,
et les N pointeurs d'ecriture dans un autre.

Reply

Marsh Posté le 17-08-2009 à 14:29:39    

*rectification  
je voulais ecrire trame [i] = fread (fTabPt[i],255,10,fichier);
et non trame [i] = fread (fTabPt[N],255,10,fichier);
dans la boucle :/
 
est ce que ma definition de fTabPt peut marcher ou dois-je faire un :
float ** fTabPt = (float *) malloc(N * sizeof(float));
et apres dans ma boucle au lieu de faire  
 trame [i] = fread (fTabPt[i],255,10,fichier);
je fais un :
fTabPt = sizeof(float)*i;
 trame [i] = fread (fTabPt,255,10,fichier);
pour me deplacer.

Reply

Marsh Posté le 17-08-2009 à 15:41:41    

D'après ton fread, tu lis toujours dans le même fichier des trucs qui font 255 octets, tu en lis 10 et tu stockes tout ça dans un tableau de float.
Ça ne correspond pas à ce que tu expliques alors je me demande si tu sais toi même ce que tu fais.
Je  ne crois pas que tu puisses avoir plusieurs pointeurs de lecture/écriture pour un fichier, c'est à toi de gérer.
Si tu as plusieurs fichiers le plus simple est peut-être de faire un tableau de FILE*

Code :
  1. FILE* fichiers[NB_FICHIERS];
  2. ...
  3. for (i=...)
  4. {
  5.     fread (destination, sizeof(float), NB_A_LIRE, fichiers[i]);
  6. }
 


(Tu peux éditer tes messages comme je le fais à l'instant pour modifier ton texte au lieu d'en réécrire un nouveau ;). Tu peux aussi mettre des balises code quand tu rédiges avec un bouton ou en ajoutant [ cpp] et [/ cpp], sans les espaces bien sûr. C'est plus agréables pour les yeux, merci.)


Message édité par ptitchep le 17-08-2009 à 15:47:12

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 17-08-2009 à 16:07:49    

non tu as raison, là je ne savait pas ce que je savais.
en tout cas ta proposition de code me convient je pense :)
bon je vais lire deux trois livres de c newbies, essayer deux trois trucs et je reviendrais peux etre vous re-enquiquiner
:):)
merci de votre patience et vos explications en tout cas

Reply

Marsh Posté le 17-08-2009 à 16:12:46    

"Le langage C", de Kernighan & Ritchie. :o

Reply

Marsh Posté le 17-08-2009 à 16:19:29    

Elmoricq a écrit :

"Le langage C", de Kernighan & Ritchie. :o


 je vais finir par croire que c'est toi qu'il a écrit ce bouquin, ou que tu touche des royaties dessus ^^
 
n'ayant ni CB, ni fnac à portée, je devrais me contenter de
"aide mémoire de c" de J;-N clot du hecquet et Ph. escoffier-gentile (edition 90)
de "c avancé" de Richard Maucourant  
et tutos et des âmes charitables que je croiserai sur la toile  :)

Reply

Marsh Posté le 17-08-2009 à 16:22:30    

Je ne touche pas de royalties, c'est juste LE bouquin de référence, simple et clair, sur le langage. Surnommé affectueusement "le K&R".

 

Donc projette de l'acheter si tu souhaites continuer à programmer en C, ça peut toujours servir. ;)

 

Sur le net, je conseille Emmanuel Delahaye :
http://www.bien-programmer.fr/index.htm
C'est moche mais c'est une bonne source d'informations.


Message édité par Elmoricq le 17-08-2009 à 16:22:58
Reply

Marsh Posté le 17-08-2009 à 16:22:30   

Reply

Marsh Posté le 17-08-2009 à 16:25:12    

merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed