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

  FORUM HardWare.fr
  Programmation
  C++

  [C/C++] Difference entre pointeur et double pointeur ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] Difference entre pointeur et double pointeur ?

n°1902345
leo42
Posté le 05-07-2009 à 03:19:59  profilanswer
 

Hello,
 
Je voudrai savoir la différence (s'il y en a une), entre:
 

Code :
  1. char *toto[];


et

Code :
  1. char **toto;


 
Merci!

mood
Publicité
Posté le 05-07-2009 à 03:19:59  profilanswer
 

n°1902377
Glock 17Pr​o
Posté le 05-07-2009 à 14:43:23  profilanswer
 

ta première ligne n'est pas valide

n°1902383
Glock 17Pr​o
Posté le 05-07-2009 à 15:20:52  profilanswer
 

autrement la différence , est que dans t'as première forme, il y a une notion de const

n°1902387
leo42
Posté le 05-07-2009 à 16:53:59  profilanswer
 

Biensur que si...
 

Code :
  1. int main(int argc, char *argv[])

Message cité 1 fois
Message édité par leo42 le 05-07-2009 à 16:56:46
n°1902388
Glock 17Pr​o
Posté le 05-07-2009 à 16:56:10  profilanswer
 

lol non

n°1902389
leo42
Posté le 05-07-2009 à 16:56:57  profilanswer
 

Si ;)
 
Et mieux, tu peux faire...
 

Code :
  1. int main(int argc, char *argv[])
  2. {
  3.   char **foo = argv;
  4. }


 
D'où ma question sur la différence...


Message édité par leo42 le 05-07-2009 à 16:57:48
n°1902390
Glock 17Pr​o
Posté le 05-07-2009 à 16:59:24  profilanswer
 

tu avais mis un ";"  ton expression n'était pas valide


Message édité par Glock 17Pro le 05-07-2009 à 16:59:34
n°1902391
leo42
Posté le 05-07-2009 à 17:02:26  profilanswer
 

Ok, oui, dans ce contexte elle ne l'est pas...
 
Maintenant ma question n'a toujours pas de réponse...

n°1902392
Glock 17Pr​o
Posté le 05-07-2009 à 17:09:05  profilanswer
 

bah je t'ai répondu char*p[] pointe sur des données constantes, tu ne pourras pas faire p[0]='x', c'est équivalent  à const char **p

Message cité 1 fois
Message édité par Glock 17Pro le 05-07-2009 à 17:10:47
n°1902432
leo42
Posté le 05-07-2009 à 22:50:29  profilanswer
 

on dirait que si...
 

Code :
  1. int main(int argc, char *argv[])
  2. {
  3. printf("Avant: %s\n", argv[0]);
  4. argv[0] = "Modif";
  5. printf("Apres: %s\n", argv[0]);
  6. }


 
Compilera sans warning (avec -Wall), et donnera:
 

Code :
  1. Avant: r:\ee.exe
  2. Apres: Modif

mood
Publicité
Posté le 05-07-2009 à 22:50:29  profilanswer
 

n°1902452
Glock 17Pr​o
Posté le 06-07-2009 à 00:52:57  profilanswer
 

argv[0] = "Modif";..... mais biensûr t'en as d'autre des comme ça ?

n°1902457
theshockwa​ve
I work at a firm named Koslow
Posté le 06-07-2009 à 01:42:59  profilanswer
 

Glock 17Pro a écrit :

bah je t'ai répondu char*p[] pointe sur des données constantes, tu ne pourras pas faire p[0]='x', c'est équivalent  à const char **p


 
je ne vois pas de constance ici. Je vois juste un tableau de pointeurs sur char. c'est sur qu'on ne peut pas faire p[0]='x' parce qu'il manque un niveau d'indirection, ni p[0] = "une chaine" car le litéral est constant, mais rien n'empêche ici de changer les valeurs du tableau.
 
pour en revenir à la question de leo42, si c'est dans le prototype d'une fonction, comme tu en prends l'exemple avec argv, avoir char **argv ou char *argv[] ne change rien. Par contre, dans le corps d'un programme, char *t[] et char **p ont bien des comportements différents. On a eu un sujet récemment où il était question des différences entre tableau et pointeur, une petite recherche devrait te permettre de le retrouver.


---------------
last.fm
n°1902469
Glock 17Pr​o
Posté le 06-07-2009 à 07:55:49  profilanswer
 

theshockwave a écrit :


 
je ne vois pas de constance ici..


 
bah si tout de même, car cette expression doit etre initilaisé avec quelquechose de constant

n°1902549
theshockwa​ve
I work at a firm named Koslow
Posté le 06-07-2009 à 10:38:01  profilanswer
 

Glock 17Pro a écrit :


 
bah si tout de même, car cette expression doit etre initilaisé avec quelquechose de constant


 
Je vois bien ce que tu veux dire, mais ton exemple n'est pas vraiment probant, puisque, même si tu fais un char*p[] = { "123", "456" };, rien ne t'empêche de faire pointer p[0] ailleurs par la suite. Effectivement, après, modifier la chaine pointée, c'est une autre question.


---------------
last.fm
n°1902665
Un Program​meur
Posté le 06-07-2009 à 13:04:31  profilanswer
 

leo42 a écrit :

Hello,
 
Je voudrai savoir la différence (s'il y en a une), entre:
 

Code :
  1. char *toto[];


et

Code :
  1. char **toto;


 
Merci!


 
Dans la portee globale:
Dans le premier cas tu as une "tentative definition" d'une variable de type
tableau de pointeur vers char.  
 
Dans le second, tu as une "tentative definition" d'une variable de type
pointeur vers pointeur vers char.
 
Une "tentative definition" est une definition s'il n'y a pas d'autres
definitions (avec un initialiseur) ou une declaration externe.  Dans le cas
du tableau, la taille est fixee a un.
 
Dans une portee de fonction.
 
Dans le premier cas tu as une erreur car le type n'est pas complet.
Dans le second cas, tu as une definition d'une variable de type pointeur
vers pointeur vers char.
 

leo42 a écrit :

Biensur que si...

Code :
  1. int main(int argc, char *argv[])



 
Dans le cadre de la liste des arguments d'une fonction, le niveau superieur
de tableau est designe en fait un pointeur.  Il n'y a pas de difference
avec

Code :
  1. int main(int argc, char **argv)


 

Glock 17Pro a écrit :

autrement la différence , est que dans t'as première forme, il y a une notion de const


Il n'y a pas de const qui intervienne ici.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1902677
Glock 17Pr​o
Posté le 06-07-2009 à 13:22:43  profilanswer
 

+1

n°1908236
aze760
Posté le 24-07-2009 à 11:14:06  profilanswer
 

Au lieu de créer un topic je demande ici. Je n'arrive pas à comprendre quel est l'utilité d'utiliser l'adresse mémoire d'une variable (le pointeur si l'ai bien compris) au lieu d'utiliser directement la variable.
Ca change quoi dans le code ?

n°1908245
Joel F
Real men use unique_ptr
Posté le 24-07-2009 à 11:28:58  profilanswer
 

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

  [C/C++] Difference entre pointeur et double pointeur ?

 

Sujets relatifs
[C#] Convertir caractères spéciaux HTMLC++ pointeur, constructeur, attributs
Convertir code C# -> VBA ou VBA -> C#Visual C++ fenetre de commande
[Visual C++] Problème conversion System::String ^ et structure[Resolu][Asp.NET][C#] Composants COM et serveur IIS
prog fonctionelle et C++[Résolu]Probleme avec des pointeur de structure
Plus de sujets relatifs à : [C/C++] Difference entre pointeur et double pointeur ?


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