Tom's Guide > Forum > Programmation > [Résolu] [RESOLUT]Pointeur et allocation tableau dans une fonction...

[Résolu] [RESOLUT]Pointeur et allocation tableau dans une fonction...

Forum Programmation : [Résolu] [RESOLUT]Pointeur et allocation tableau dans une fonction...

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !

Lire la meilleure réponse, apportée par CRicky.

Mot :    Pseudo :           
 

Bonjour!

J'ai un soucis technique en C++ qui me laisse perplexe.

Pour faire simple voici le code:

Citation :

#include <iostream>
using namespace std;

void fill(int **T){
cout<<"T:"<<T<<endl;
cout<<"*T:"<<*T<<endl;
*T = new(int[3]);
*T[0] = 1;
*T[2] = 2;
*T[1] = 3;

}

int main(){
int *P;
cout<<"&P:"<<&P<<endl;
cout<<"P:"<<P<<endl;
fill(&P);
cout<<P[0]<<" "<<P[1]<<" "<<P[2]<<" "<<endl;
}


Le but étant de pouvoir déclarer un pointeur et de le remplir avec l'adresse d'une zone mémoire corespondant a un tableau.

Avec ce code pas d'erreur de compilation mais les affectations de T[1] et T[2] créer une erreur de segmentation lors de l'exécution (mais pas T[0] !!!).
Par contre en modifiant comme ça:
*(*T+1) = 2;
*(*T+2) = 3;
La ça marche !
Mais pour autant que je sache T[1] == *T+1, non ?
Et bien en faisant d'autre cout, oui pour T[0] mais pas pour T[1] et T[2] :/ ...

Donc là j'ai dut raté un truc !!

Quelqu'un peut m'expliquer :) ?

Merci de votre gentillesse :) ! et de votre indulgence :) ! et de ... Oui ça fait trop après :lol:


Message édité par Vermoute le 31-01-2009 à 15:43:18
T[1] et *T+1 sont différents car l'opérateur de déréférencement * est prioritaire sur l'opérateur d'addition donc *T+1 = (*T) + 1, donc, ça lit le contenu de T[0] auquel on ajoute 1.
T[1] = *(T + 1), on déplace le pointeur d'un élément de T et on lit le contenu.

 

L'opérateur [] est prioritaire sur l'opérateur *, donc *T[0] = *(T[0])

 

Lorsque tu fais *T = new(int[3]); , tu crées un tableau de 3 éléments à l'adresse (*T). Donc, si tu veux accéder au troisième élément, tu dois faire (*T)[2]. Il faut garder les parenthèses, car comme je le disais, l'opérateur [] est prioritaire sur *.
Et on a bien (*T)[2] = *((*T) + 2) = *(*T + 2) car * est prioritaire sur +

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.
Meilleure réponse

T[1] et *T+1 sont différents car l'opérateur de déréférencement * est prioritaire sur l'opérateur d'addition donc *T+1 = (*T) + 1, donc, ça lit le contenu de T[0] auquel on ajoute 1.
T[1] = *(T + 1), on déplace le pointeur d'un élément de T et on lit le contenu.

 

L'opérateur [] est prioritaire sur l'opérateur *, donc *T[0] = *(T[0])

 

Lorsque tu fais *T = new(int[3]); , tu crées un tableau de 3 éléments à l'adresse (*T). Donc, si tu veux accéder au troisième élément, tu dois faire (*T)[2]. Il faut garder les parenthèses, car comme je le disais, l'opérateur [] est prioritaire sur *.
Et on a bien (*T)[2] = *((*T) + 2) = *(*T + 2) car * est prioritaire sur +


Message édité par CRicky le 31-01-2009 à 14:29:17
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Hum...
Ok je voit!

Merci :) !
Ce truc commençais a me tracacé ^^ !

Répondre à Vermoute
Tom's Guide > Forum > Programmation > [Résolu] [RESOLUT]Pointeur et allocation tableau dans une fonction...
Aller à :

Il y a 234 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens