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

  FORUM HardWare.fr
  Programmation
  C

  Tableau de pointeurs en c

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tableau de pointeurs en c

n°1915641
ProGrammeH​eure
Posté le 17-08-2009 à 11:05:41  profilanswer
 

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.
mood
Publicité
Posté le 17-08-2009 à 11:05:41  profilanswer
 

n°1915695
Elmoricq
Modérateur
Posté le 17-08-2009 à 12:50:26  profilanswer
 

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
n°1915722
ProGrammeH​eure
Posté le 17-08-2009 à 14:02:57  profilanswer
 

merci beaucoup de ta reponse en tout cas :)

n°1915736
ProGrammeH​eure
Posté le 17-08-2009 à 14:22:04  profilanswer
 

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.

n°1915743
ProGrammeH​eure
Posté le 17-08-2009 à 14:29:39  profilanswer
 

*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.

n°1915816
ptitchep
Posté le 17-08-2009 à 15:41:41  profilanswer
 

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
n°1915843
ProGrammeH​eure
Posté le 17-08-2009 à 16:07:49  profilanswer
 

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

n°1915848
Elmoricq
Modérateur
Posté le 17-08-2009 à 16:12:46  profilanswer
 

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

n°1915857
ProGrammeH​eure
Posté le 17-08-2009 à 16:19:29  profilanswer
 

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  :)

n°1915861
Elmoricq
Modérateur
Posté le 17-08-2009 à 16:22:30  profilanswer
 

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
mood
Publicité
Posté le 17-08-2009 à 16:22:30  profilanswer
 

n°1915865
ProGrammeH​eure
Posté le 17-08-2009 à 16:25:12  profilanswer
 

merci


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

  Tableau de pointeurs en c

 

Sujets relatifs
Pointeur de tableau de pointeurs de strings....[C++] new : tableau de pointeurs
delete[] & tableau de pointeursconversion adresse de tableau de pointeurs
[C] tableau de pointeurs...Tableau de pointeurs sur fonctons.
Redimensionner un tableau de pointeursDelete et tableau de pointeurs
[C++] Utilisation des pointeurs pour tableau[C++] Tableau de Pointeurs Multi-dimension
Plus de sujets relatifs à : Tableau de pointeurs en c


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