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

  FORUM HardWare.fr
  Programmation

  [c++] besoin d'une petite explication

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++] besoin d'une petite explication

n°16781
drakkeng
Posté le 03-03-2001 à 10:24:30  profilanswer
 

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

mood
Publicité
Posté le 03-03-2001 à 10:24:30  profilanswer
 

n°16782
verdoux
And I'm still waiting
Posté le 03-03-2001 à 10:46:06  profilanswer
 

C'est:
int *pa = &a;
et
int tabint[]={1,2,3}

n°16783
drakkeng
Posté le 03-03-2001 à 10:54:38  profilanswer
 

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?

n°16784
verdoux
And I'm still waiting
Posté le 03-03-2001 à 11:00:03  profilanswer
 

La je comprends pas trop, ça veut dire que tabint est un tableau de pointeurs sur des int.

n°16785
drakkeng
Posté le 03-03-2001 à 11:03:40  profilanswer
 

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 !?

n°16786
verdoux
And I'm still waiting
Posté le 03-03-2001 à 11:10:11  profilanswer
 

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.

n°16789
drakkeng
Posté le 03-03-2001 à 11:27:29  profilanswer
 

je comprends plus rien :cry:
 
je déteste le C++ c'est incohérent comme langage on peut écrire n'importe quoi.

n°16797
Pingouin
Posté le 03-03-2001 à 13:23:47  profilanswer
 

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.

n°16808
drakkeng
Posté le 03-03-2001 à 14:59:20  profilanswer
 

Et quand on déclare un pointeur comme cela  
 
int **variable ;
 
ça veut dire quoi ?

n°16811
verdoux
And I'm still waiting
Posté le 03-03-2001 à 15:15:45  profilanswer
 

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)

mood
Publicité
Posté le 03-03-2001 à 15:15:45  profilanswer
 

n°16812
drakkeng
Posté le 03-03-2001 à 15:23:43  profilanswer
 

:crazy:
donc int **variable ça s'initialise comment par exemple ?

n°16828
BifaceMcLe​OD
The HighGlandeur
Posté le 03-03-2001 à 17:37:53  profilanswer
 

Ben comme ça :
 
int   n = 1;
int*  p = &n;
int** variable = &p;
 
:D

n°16831
drakkeng
Posté le 03-03-2001 à 17:57:08  profilanswer
 

je croyais que s'etait un tableau de pointeur a 2 dimenssions ?

n°16856
Roswell_
Posté le 03-03-2001 à 21:58:31  profilanswer
 

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


---------------
http://www.cheata.net le site qui vous donne la banane!
n°16881
la viper
Posté le 04-03-2001 à 03:07:26  profilanswer
 

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).

n°16882
la viper
Posté le 04-03-2001 à 03:08:31  profilanswer
 

un tableau à 2 dimensions :
 
int tab2d[5][5];
 
3D
 
int tab3d[5][5][5];
 
....

n°16901
Dost67
Posté le 04-03-2001 à 11:21:13  profilanswer
 

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 ???).

n°16902
Dost67
Posté le 04-03-2001 à 11:26:43  profilanswer
 

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.

n°16942
BifaceMcLe​OD
The HighGlandeur
Posté le 04-03-2001 à 18:06:03  profilanswer
 

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*[]...


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

  [c++] besoin d'une petite explication

 

Sujets relatifs
Besoin aide PHP pour me connecter et envoyer requettes SQL à InterbaseDemande explication pour le langage C
[pages perso free] explication des statistiques[Javacsript] Besoin de code...
Besoin d'aide !VISUAL BASIC : recherche desesperement petite application avec BDD...
php nuke: petite questionbesoin de programmeurs php pour m'aider sur un projet tout simple
Besoin de connaitre Syntaxe pour conditionnel complexe VBScriptBesoin d'aide pour l'interface graphique TKINTER du langage python
Plus de sujets relatifs à : [c++] besoin d'une petite explication


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