Tableau de pointeurs en c - C - Programmation
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 |
=> 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.
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.
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.
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 :
|
(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.)
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
Marsh Posté le 17-08-2009 à 16:12:46
ReplyMarsh Posté le 17-08-2009 à 16:19:29
Elmoricq a écrit : "Le langage C", de Kernighan & Ritchie. |
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
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.
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.