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

 


Dernière réponse
Sujet : [c++] besoin d'une petite explication
BifaceMcLeOD

Dost67 a écrit a écrit :

Les pointeurs sur des tableaux sont utiles quand il s'agit de chaînes de caractères constantes.
 
Exemple tiré d'un bouquin Delannoy :
int * jour[7] = {"lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"} ;
 
Là jour[1] c'est l'adresse du début de la chaîne "mardi". On y accède donc par * jour[1] ou alors avec le %s pour l'adresse d'une chaîne de caractère (me trompeux-je ???).




Ben la seule erreur que je vois comme ça est que jour doit être déclaré de type char*[] et non int*[]...


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
BifaceMcLeOD

Dost67 a écrit a écrit :

Les pointeurs sur des tableaux sont utiles quand il s'agit de chaînes de caractères constantes.
 
Exemple tiré d'un bouquin Delannoy :
int * jour[7] = {"lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"} ;
 
Là jour[1] c'est l'adresse du début de la chaîne "mardi". On y accède donc par * jour[1] ou alors avec le %s pour l'adresse d'une chaîne de caractère (me trompeux-je ???).




Ben la seule erreur que je vois comme ça est que jour doit être déclaré de type char*[] et non int*[]...

Dost67 J'oubliais de préciser qu'en C, une chaîne de caractère constante retourne son adresse donc dans jour[0] il y a l'adresse de Lundi.
 
Ce qui confirme que dans int * t[] = {1, 2, 3} ;
t[0] aura comme adresse 1, ce qui ne représente rien.
Dost67 Les pointeurs sur des tableaux sont utiles quand il s'agit de chaînes de caractères constantes.
 
Exemple tiré d'un bouquin Delannoy :
int * jour[7] = {"lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"} ;
 
Là jour[1] c'est l'adresse du début de la chaîne "mardi". On y accède donc par * jour[1] ou alors avec le %s pour l'adresse d'une chaîne de caractère (me trompeux-je ???).
la viper un tableau à 2 dimensions :
 
int tab2d[5][5];
 
3D
 
int tab3d[5][5][5];
 
....
la viper int a; -> entier
int *p; -> pointeur d'entier ex: p = &a;
int **pp; -> pointeur sur pointeur d'entier ex: pp = &p;
 
maintenant, il faut voir qu'un tableau n'est en fait qu'un pointeur !!!!
 
int tab[5]; equivaut à int *tab;
sauf qu'on dit qu'on reserve 5 zones memoire de 2 octets (int) a partir de l'adresse de tab.
 
tab[0] -> equivaut à tab (l'adresse du pointeur ou la valeur pointée)
 
tab[1] -> *(tab+1)
tab[2] -> *(tab+2)
 
c'est juste une question de visibilité.
 
maintenant, les pointeurs de pointeurs c'est la meme choses sauf qu'au lieu que ce soit des entiers dans le tableau, se sont des pointeurs (adresses).
Roswell_ oui ben c'est ça, on peu l'initialiser comme ca
int i=0;
int **tab=(int **)malloc(h*sizeof(int *));// on alloue h pointeur sur pointeurs de type int
for(i=0;i<h;i++)
  tab[i]=(int *)malloc(w*sizeof(int));// on alloue w pointeur sur int
 
apres tu peux manipuler le tableau d'int comme ça tab[i][j]//i<h et j<w
drakkeng je croyais que s'etait un tableau de pointeur a 2 dimenssions ?
BifaceMcLeOD Ben comme ça :
 
int   n = 1;
int*  p = &n;
int** variable = &p;
 
:D
drakkeng :crazy:
donc int **variable ça s'initialise comment par exemple ?
verdoux variable est déclaré comme un pointeur sur un pointeur sur un int.
 
int *(*(*variable[N])())() déclare variable comme un tableau de N pointeurs sur des fonctions retournant des pointeurs sur des fonctions retournant des pointeurs sur des int (si je me suis pas trompé :D)
drakkeng Et quand on déclare un pointeur comme cela  
 
int **variable ;
 
ça veut dire quoi ?
Pingouin Ben ça c'est du C pas du C++
int *t[] = {1, 2, 3}
Ca veut dire que les pointeurs ont comme adresse 1, 2 et 3. Ce qu'ils pointent ne l'est certainement pas.
 
Guillaume.
drakkeng je comprends plus rien :cry:
 
je déteste le C++ c'est incohérent comme langage on peut écrire n'importe quoi.
verdoux Avec int* tab[]={1,2,3}, tab[0] est l'adresse pointée et cette adresse vaut ici 1.
Si tu veux accéder à l'int pointé, il faut faire *tab[0] et en principe l'appli plante.
 
SI tu as vu int* tab[]={1,2,3} dans un bouquin, jette le.
drakkeng oui c'est ça ,mais la ou je comprends plus c'est la façon dont on accéde aux int pointé :
 
en faisant par exemple :
 
cout << tabint[0] //on obtient 1 a l'écran  
 
je trouve cela bizzare !?
verdoux La je comprends pas trop, ça veut dire que tabint est un tableau de pointeurs sur des int.
drakkeng oui mais j'ai souvent vu des choses du genre :
 
int *tabint[]={1,2,3} dans des livres  
 
ça corresponds a quoi?
tabint[0] pointe sur 1 ?
tabint[1] pointe sur 2 ?
tabint[2] pointe sur 3?
verdoux C'est:
int *pa = &a;
et
int tabint[]={1,2,3}
drakkeng Bon je débute en c++ et il y a une notion que je comprends pas trop avec les pointeurs:
voici un petit exemple :
 
quand on fait
 
int a=2;
int pa=&a;
 
pour accéder a la valeur de la variable pointée par "pa" on fait un truc du genre:
 
int b=*pa;//b vaut 2
 
mais la ou je comprends plus c'est avec les tableaux de pointeurs
exemple:
 
int *tabint[]={1,2,3};
 
comment se fait-il que pour accéder au valeur 1,2 ou 3 il suffise d'écrire:  
 
int b=tabint[0]; //b prend comme valeur 1  
...
 
je pensais que:  
int b=*tabint[0];  était la syntaxe logique pour accéder a la valeur .
 
merci de vos explications

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