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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Suivante
Auteur Sujet :

différence entre un char p[][] et un char * p[] ?

n°696116
push
/dev/random
Posté le 08-04-2004 à 23:22:14  profilanswer
 

Reprise du message précédent :
bon.. lol
 
 
pour le printf("%x" ); si je fais ca sur un int je n'optient pas une adresse, j'obtient ca uniquement sur un pointeur, logique vu qu'un pointeur contient une adresse lol. c'est pour ca que je trouve pas ca très logique que x de p[x][] contienne une adresse et je parle pas de la sienne hein..  
 
pour qsort dans le cas d'un p * [] bein il intervertit les pointeur , et ca ca me pose pas de problème au niveau de la fonction de comparaison.
 
c'est pour le tableau p[][] que ca pose problème, il intervertit quoi ? bonne question lol si jme base sur mon résonnement d'au dessus il intervertit aussi des pointeurs de char c'est ca qui est fous  :pt1cable:  
 
 :hello:

mood
Publicité
Posté le 08-04-2004 à 23:22:14  profilanswer
 

n°696136
bjone
Insert booze to continue
Posté le 09-04-2004 à 00:19:56  profilanswer
 

printf("%x" ) t'affiche un int en valeur hexa. point.
 
si tu passes un int tu as la valeur d'un int.
si tu passes un pointeur tu as -par chance- la valeur du pointeur (because taille int == taille adresse, ce qui n'est pas toujours le cas).
 
si avec un printf("%x",t[.... tu vois ce que tu penses être une adresse marche c'est parceque le compilo t'as sorti l'adresse vu que c'était à ce moment ce qui tu est le plus censé vu le type de 't')
 
un 't[][]', avec printf("%x",t[i]) te donnera une adresse.
un 'int t[]', avec printf("%x",t[i]) te donnera la valeur de t[i] est non son adresse, printf n'en sait rien c'est le compilo qui l'a passé en paramètre.
 
ensuite pour avoir une adresse formattée correctement avec printf, c'est %p pas %x (mais on s'en fout ça reste compréhensible).
 
la chose qu'il faut que tu comprennes c'est que printf il affiche ce que est sur sa pile, et si tu mets des conneries il t'affiche des conneries, ça ne prouve rien en soit.
 
et si je te dis qu'avec un:
 
t[100][16]
printf("%x", t[0]) t'afficheras une valeur, mettons 11000
et que
printf("%x", t[1]) t'afficheras 11010.
 
parceque le compilo aura passé automatiquement et implicitement l'adresse de l'élement t[0] et t[1], sous-entendu t[0][0] et t[1][0].
 
tu commençes a saisir où il faut que je te le fasse en décimal ?

n°696137
Taz
bisounours-codeur
Posté le 09-04-2004 à 00:21:45  profilanswer
 

%p :o

n°696138
bjone
Insert booze to continue
Posté le 09-04-2004 à 00:22:21  profilanswer
 


 
vi je l'ai mis ;)
 
mais j'avoues qu'il fallait le calmer beaucoup plustôt sur le "mais printf y dit que....."


Message édité par bjone le 09-04-2004 à 00:25:18
n°696158
push
/dev/random
Posté le 09-04-2004 à 00:58:13  profilanswer
 

si on peut même plus croire printf ou va t-on  :sweat:  
 
moi j'essayais de comprendre avec mes (pauvres) moyens..
 
ok pour la leçon printf lol
 
mon erreur venait du fait que j'imaginais mal les tableaux à plus d'une dimention je crois.
 
le fait de voire un tableau t[2][2][2] par ex comme un t[8] et la je suis ok pour mon strcmp.
 
je sais pas si c une bonne idée de voir ca comme ca mais au moin ca me gêne plus lol.
 
j'aurais quand même compris quelques petites choses au passage,  
 
merci bien   :jap:  
 

n°696161
Taz
bisounours-codeur
Posté le 09-04-2004 à 01:22:31  profilanswer
 

mais push, comme avec un tableau tout est contigü t[2][2][2] est semblable à t[8]

n°696176
bjone
Insert booze to continue
Posté le 09-04-2004 à 02:59:04  profilanswer
 

push a écrit :

si on peut même plus croire printf ou va t-on  :sweat:  
 
moi j'essayais de comprendre avec mes (pauvres) moyens..
 
ok pour la leçon printf lol
 
mon erreur venait du fait que j'imaginais mal les tableaux à plus d'une dimention je crois.
 
le fait de voire un tableau t[2][2][2] par ex comme un t[8] et la je suis ok pour mon strcmp.
 
je sais pas si c une bonne idée de voir ca comme ca mais au moin ca me gêne plus lol.
 
j'aurais quand même compris quelques petites choses au passage,  
 
merci bien   :jap:  
 
 


 
voili voilou on arrive au bout. (enfin à peut près...)
 
donc avec 'char t[100][16]' et 'char *t[100]', pour chaque, quel est la taille en octet des éléments manipulés par qsort (on supposera une machine à adressage 32bit :D) ? (histoire d'être sûr que tu comprennes)


Message édité par bjone le 09-04-2004 à 02:59:42
n°696177
Taz
bisounours-codeur
Posté le 09-04-2004 à 03:04:44  profilanswer
 

qsort n'a aucune idée de ce qu'il manipule

n°696178
bjone
Insert booze to continue
Posté le 09-04-2004 à 03:07:16  profilanswer
 

tout à fait, c'est pour ça qu'on lui passe la taille d'un élément ;) (je veux voir si il a bien tout saisi)

n°696242
push
/dev/random
Posté le 09-04-2004 à 09:26:14  profilanswer
 

dans le cas du [][] on lui passe la taille d'un élément donc la taille d'un char, 1 octet. Et pour le *[] la taille d'un élément donc d'un pointeur, 4 octet.
 
 :sol:  
 

mood
Publicité
Posté le 09-04-2004 à 09:26:14  profilanswer
 

n°696470
bjone
Insert booze to continue
Posté le 09-04-2004 à 13:50:29  profilanswer
 

heu bon....
 
je me suis mal exprimé alors :D
 
supposons que tu cherches à trier 100 chaines de caractères:
 
dans la première version, tes chaines sont contenues, les unes derrières les autres dans dans un zone fixe de 16 octets chaqune (donc 15 caractères si on considère le NULL)
 
dans la deuxième, tes chaines sont en vrac en mémoire, et maintenues via le tableau de pointeurs.....
 
et donc quelle taille d'élément va manipuler qsort pour le premier cas ?


Message édité par bjone le 09-04-2004 à 13:58:44
n°697062
push
/dev/random
Posté le 10-04-2004 à 14:28:34  profilanswer
 

je dirais que qsort manipule des éléments de 16 octect dans le cas de t[100][16]
 
donc c'est pour ca que dans qsort comme taille d'élément je lui passe sizeof t[0], ca représente les 16 premier élément de ce tableau
 
pour un tableau t[2][2][2] en mémoire les données se suivent comme ca ?
 
000
001
010
011
100
101
110
111


Message édité par push le 10-04-2004 à 14:47:12
n°697076
bjone
Insert booze to continue
Posté le 10-04-2004 à 14:37:18  profilanswer
 

valà c'est ça... (par contre le sizeof je vérifies que ça passe, moi je préfèrerai spécifier directement une taille de 16 octets)

n°697083
push
/dev/random
Posté le 10-04-2004 à 14:46:08  profilanswer
 

[:yaisse2]
 
merci d'avoir tenu jusqu'au bout  :whistle:

n°697127
bjone
Insert booze to continue
Posté le 10-04-2004 à 15:51:33  profilanswer
 

wé mais on s'est relayé :D

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Différence entre chaques languages de programmation ?Pb : "cannot convert char[2] to char, il m'écrit le code ASCII...
de char** à void**conversion string -> char *
probleme pointeur void alors qu'un cast de char* marche :\fonction char -> bool
[PHP Mysql] probleme pour avoir la difference entre 2 dates.[OpenGL] difference (newbie)
[DEBUTANT]Problème avec const char[C] Question sur strtol (conversion de char* en int)
Plus de sujets relatifs à : différence entre un char p[][] et un char * p[] ?


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