Passer l'adresse d'un tableau en parametre - C - Programmation
Marsh Posté le 22-06-2004 à 14:04:03
passe un pointeur de pointeur
un pointeur de tableau n'a rien à voir avec ce que tu veux
et revois tes pointeurs, tu délires commplètements là avec tes &&&&&&& à n'en plus savoir qu'en faire
Marsh Posté le 22-06-2004 à 14:11:51
si je suis pas englué je dirais fait un truc plustôt comme ça:
Code :
|
Marsh Posté le 22-06-2004 à 14:19:33
Déjà, pour l'allocation :
Code :
|
Ici tu alloue 255 caractères et pas un tableau de chaine ( du char** )
Il faut faire:
Code :
|
où tu constuit un tableau de 255 chaines de caratères
Ensuite :
Donc il faut que tu écrives : fonction( tab );
De toute façon, c'est logique. tab est du type char**, ta fonction prend des char** donc c'est bon...
Marsh Posté le 22-06-2004 à 14:20:39
ReplyMarsh Posté le 22-06-2004 à 14:26:06
Pour l'allocation, je suis ok, j'ai juste pense allocation averc la chaine de caractere, et pas avec le tableau.
Pas de soucis non plus pour passer le rableau en parametre.
Mais ce qui m'interesse, c'est que les modifications qui seront faites dans fonction() soient lisibles dans le main. D'ou la necessite de passer l'addresse du tableau.
Apres, je m'embrouille encore avec les pointeurs ...
Marsh Posté le 22-06-2004 à 14:33:00
un tableau n'est pas un pointeur
faire la différence, c'est comprendre la moitié du problème
Marsh Posté le 22-06-2004 à 14:35:52
ok.
Donc, si j'ai bien compris, il n'est pas possible de recuperer mon tableau autrement qu'en le renvoyant, ou en passant par une structure, ou une variable globale.
Marsh Posté le 22-06-2004 à 14:50:33
ok
Je comprends surtout que si ce n'est pas 200% limpide, les pointeurs, c'est assez prise de tête
Mais merci de votre aide, j'ai déjà fait un grand pas dans l'abysse des pointeurs ...
Marsh Posté le 17-08-2009 à 11:04:13
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.
Marsh Posté le 17-08-2009 à 11:12:31
float fTabPointeur
c'est bien la peine de faire de la notation à la con qui ta variable n'est ni un tableau ni un pointeur.
float** a;
Marsh Posté le 17-08-2009 à 11:44:19
donc ce que j'ai fait c'est totalement nimportequoi...
comme je voulais faire un tableau de "inb" pointeurs, je devrais faire :
int inb=3;//par exemple
float** fTabPointeur = malloc(sizeof(float)*nb);
et je passe en paramètre :
Initialisation(**fTabPt, inb);
...
}
void Initialisation(float** fTabPointeur, int inombre)
{
int iBoucleInit;// variable de boucle pour l'initialisation des pointeurs
for (iBoucleInit = 0 ; iBoucleInit < inombre ; iBoucleInit++)
{
*fTabPointeur= NULL;
fTabPointeur++;
}
}
est ce que c'est correct comme ça ?
Marsh Posté le 17-08-2009 à 13:00:38
Non.
Tu donnes à malloc sizeof(float) * nb, ce qui sous-entend que tu vas créer un pointeur sur des float, donc un float*. Et tu stockes ça dans un... float**, qui est un pointeur vers des pointeurs de float. Il y a donc une erreur.
edit : ouch, j'avais pas fait attention à la fonction d'initialisation... À ce stade, je préconiserais plutôt l'achat du livre "Le Langage C" (de Kernighan et Ritchie) et de potasser un peu la notion de pointeurs.
Marsh Posté le 17-08-2009 à 14:45:44
à vrai dire la notion de pointeur je comprend quand même (malgrés des lacunes), mais la ou je me perds completement c'est dans la notion de pointeur de pointeurs.
D'autre part je crois comprendre la notion de tableau:
ex: int A[10];
va creer une zone mémoire de 40 octets avec un pointeur A pointant sur la première case mémoire de mon tableau.
(vous m'arrêtez si je vais dans le mur... )
maintenant je veut créer un tableau de N cases dont chaque case est un pointeur, comment dois-je m'y prendre?
Marsh Posté le 17-08-2009 à 15:28:45
De la même façon.
Code :
|
Cela va créer une zone mémoire de 10 pointeurs sur entier. Avec A qui pointe au début de ce tableau.
Ta zone mémoire ne fera pas 40 octets mais 40*sizeof(int) octets. Soit 160 octets pour des entiers codés sur 4 octets.
Marsh Posté le 17-08-2009 à 15:52:56
ptitchep a écrit : De la même façon.
|
int A[10];
non : ma zone mémoire fera 10*sizeof(int) octets: soit 40 octets!
mais merci de ta reponse
et comment initialise t on ces pointeur du coup?
on fait un
int * A[10]
for {i=0;i<10;i++}
A[i]= NULL;
???
il va comprendre que c'est des pointeur dans le tableau là?
Marsh Posté le 17-08-2009 à 16:00:35
Oups désolé. On est lundi...
Oui, il va "comprendre".
Marsh Posté le 17-08-2009 à 16:13:11
merci beaucoup. Ouaip lundi erff, moi aussi, dejà que je débute mais là en plus c'est lundi ---> je sorts des trucs qui me font même peur à moi-même
"Suite au fait que lundi tombe un mardi ce mercredi, notre réunion du jeudi se tiendra vendredi ce samedi car dimanche est un jour férié."
[Red Skelton]
Marsh Posté le 17-08-2009 à 16:15:07
ProGrammeHeure a écrit : |
Ceci dit, ta zone ne fera 40 bytes que si ton binaire est compilé en 32 bits.
Dans tous les cas, ta zone fera 10 * sizeof(int), c'est encore le plus simple.
Marsh Posté le 22-06-2004 à 14:01:32
Bonjour.
Je cherche a passer l'adresse d'un tableau de char en parametre.
L'idee est de pouvoir, une fois la fonction effectuee, recuperer les infos contenues dans 2 tableaux, sans utiliser de variable globale.
Cependant, si avec un char * je n'ai aucun probleme, ce n'est pas la même chose avec char **.
Exemple fonctionnel avec char *
Le même (qui doit etre faux puisque ne foncitonne pas) avec char **
Je sais que strdup n'est pas une "bonne" fonction, car ne retourne pas de code d'erreur propre.
Mais la fonction est suffisante pour cet exemple.
Je dois avoir mal saisi qqch sur les pointeurs, et comme je ne trouve pas la solution, si qqun peut me donner une piste.
Merci
Message édité par fargo_01 le 22-06-2004 à 14:02:20