voila dans mon esprit un tableau à 2 dimentions cela équivalait à faire un tableau de pointeur où j'aurais alloué de la mémoire à chaque pointeur mais apparement non ?
donc je penssais qu'un char p[2][3];
et un char * p[2]; p[0]=malloc(3); p[1]=malloc(3);
était identique.
Message édité par push le 07-04-2004 à 14:10:18
Publicité
Posté le 06-04-2004 à 13:32:55
Taz
bisounours-codeur
Posté le 06-04-2004 à 13:40:12
non
[2][3] tu as tout contigu en mémoire {{ , , }, { , , }}
avec un tableau de pointeur, seuls tes pointeurs se contigus, ce qui est pointé se trouve n'importe ou
push
/dev/random
Posté le 06-04-2004 à 13:44:18
mais dans la manipulation de l'un commme de l'autre je peux utiliser la forme p[][], alors j'ai du mal à saisir dans le code de tantot avec qsort pourquoi j'ai du modifier quelque chose dans mon strcmp
Taz
bisounours-codeur
Posté le 06-04-2004 à 13:46:41
bon allez, qui me colle la définition d'un tableau
Taz
bisounours-codeur
Posté le 06-04-2004 à 13:48:04
parce que l'un est contigu, l'autre nécessite un dereferencement
push
/dev/random
Posté le 06-04-2004 à 13:50:05
sans vouloir abuser taz, tu pourrais me dire plus clairement se que tu veux dire par contigu et dereferencement
Taz
bisounours-codeur
Posté le 06-04-2004 à 13:52:27
ben contigü et dereferencer, ben *pointeur
push
/dev/random
Posté le 06-04-2004 à 14:12:11
Code :
void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(constvoid *, constvoid *));
Code :
int strcmp(constchar *s1, constchar *s2);
qsort à besoin de 4 arguments, 1 void *, le nombre d'éléments, la taille d'un de ces éléments et une fonction de comparaison qui prendra 2 void* en arguments.
et strcmp lui prend 2 char* en argument et renvoit un entier.
pas d'incohérence dans se que je dis jusqu'ici ?
Taz
bisounours-codeur
Posté le 06-04-2004 à 14:17:34
ben ça c'est la documentation ... d'autres platitudes à dire ?
push
/dev/random
Posté le 06-04-2004 à 14:22:35
platitude.. lol
enfait se que je ne saisi pas c'est l'écriture
strncmp(*(char**)a, *(char**)b); dans le cas du tris d'un tableau de pointeur.
et strncmp((char*)a, (char*)b); dans le cas du tris d'un [][]
Publicité
Posté le 06-04-2004 à 14:22:35
Taz
bisounours-codeur
Posté le 06-04-2004 à 14:26:40
déjà y a pas de n
déjà on elève pas les const comme ça
après, c'est juste une histoire de types
push
/dev/random
Posté le 06-04-2004 à 14:36:43
oups oui pour le n,
je pensse que le problème c'est que j'interprète mal *(char**)a ou meme (char*)a
c'est serait pas un typage par hasard parcequ'a la base a était un void* ?
Taz
bisounours-codeur
Posté le 06-04-2004 à 14:41:17
ben c'est un cast ...
push
/dev/random
Posté le 06-04-2004 à 14:55:02
mmm ok...
donc...
dans le premier cas a est un pointeur de pointeur de char et strcmp compare se qu'il pointe donc un pointeur de char.
et dans le second cas a est un pointeur de char et strcmp compare ce pointeur de char donc c logique...
(correction)
Message édité par push le 06-04-2004 à 14:56:23
push
/dev/random
Posté le 06-04-2004 à 14:58:40
se qui me ramène au problème de base *(char **) a ce n'est pas la meme chose que (char *)a et je vois pas la diff pff
Taz
bisounours-codeur
Posté le 06-04-2004 à 15:00:05
ben parce que le void* permet une certain généricité, en gros ça pointe vers n'importe quoi : à toi de savoir ce que c'est vraiment et comment t'en servir
push
/dev/random
Posté le 06-04-2004 à 15:33:10
si a est un char ** et que je fais une comparaison sur *a
ou que a soit un char * et que je face la comparaison sur a
je vois pas de différence, ya quelque chose qui m'échappe la.
Taz
bisounours-codeur
Posté le 06-04-2004 à 15:35:07
ben ton dernier message est clairement l'explication
push
/dev/random
Posté le 06-04-2004 à 15:42:41
si tu le dis
mais pq c'est 2 écritures differentes dans le cas du p[][] et *p[]
Taz
bisounours-codeur
Posté le 06-04-2004 à 15:46:10
parce que c'est pas la même chose ... tu le fais exprès ou quoi?
push
/dev/random
Posté le 06-04-2004 à 15:54:02
non même pas
"parce que l'un est contigu, l'autre nécessite un dereferencement"
j'ai aucune idée de se que ca peut signifier et encore moin de l'effet que ca à sur mes écritures dans mon strcmp.
Avec un déréférencement le tri sera plus long. si les éléments sont contigus, ça sera plus rapide en mémoire donc à trier
ouais, là tu nous fait de la bonne parano
jagstang
Pa Capona ಠ_ಠ
Posté le 06-04-2004 à 15:59:31
ta gueule
edit :
Message édité par jagstang le 06-04-2004 à 15:59:57
Taz
bisounours-codeur
Posté le 06-04-2004 à 16:01:03
t'as oublié que ça gaché la mémoire de manière inacceptable aussi
push
/dev/random
Posté le 06-04-2004 à 16:14:11
bein un tableau p[i] ca équivaut à *(p+i)
je vois pas trop se que je pourrais découvrire sur les tableaux, je vais revoir ca mais bon
Taz
bisounours-codeur
Posté le 06-04-2004 à 16:15:55
ben ça c'est juste une histoire de notation ... je vois pas ce que tu conclus
jagstang
Pa Capona ಠ_ಠ
Posté le 06-04-2004 à 16:19:02
push>> où sont stocké les données de ton tableau, pour chaque notation
p[][]
et *p[]
et
**p
Taz
bisounours-codeur
Posté le 06-04-2004 à 16:20:13
compter pas sur moi pour recoller ma définition un peu complète d'un tableau, c'est pas à moi de faire les recherches, c'est à ceux qui posent les questions
push
/dev/random
Posté le 06-04-2004 à 16:20:32
bein je conclus rien
j'essayais juste de trouver des pistes pour différencier p[][] et p*[]
enfin je vais continuer sur la piste "qu'est-ce qu'un tableau" alors.
push>> où sont stocké les données de ton tableau, pour chaque notation
p[][]
et *p[]
et
**p
en mémoire
non aller
hum, quand on créer un tableaui p[][] on définis d'une manière ou d'une autre sa taille, il aura de de la mémoire alloué pour ca, apres p*[] un tableau de pointeur bein c la même chose non ? on définis la taille de chaque pointeur si on veut mettre des données dedans.
enfin c bien confus quoi ces pointeurs enfait
push
/dev/random
Posté le 06-04-2004 à 16:30:44
je vais voir tes liens
Taz
bisounours-codeur
Posté le 06-04-2004 à 16:32:29
j'aime bien t'as façon de penser ... c'est la même chose pourtant tu les définis pas pareil ...
---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Taz
bisounours-codeur
Posté le 06-04-2004 à 16:37:34
chiche, si je trouve pas de travail cet été ... je pourrais faire un petit essai