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

Solutions (2)
Tags :
  • element
  • Programmation
|
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: 
Contenus similaires
Meilleure solution
partage
|
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 +
  • Commenter cette solution |
Score
0
òh
òi
|
Hum...
Ok je voit!

Merci :)  !
Ce truc commençais a me tracacé ^^ !
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS