Accueil > Forum > > > > déréférencer de pointeur
déréférencer de pointeur
mercredi 23 mars 2011 à 13:06:34 |
déréférencer de pointeur

sdrh
|
Bonjour à tous et merci d'avance pour vos réponses.
Je suis actuellement entrain de transposer un code Matlab en c++.
Pour cela j'utilise une petite classe matrice assez élémentaire que j'ai codé, en utilisant des pointeurs de pointeurs (pas de classe template ni de valarray ou vector, seulement des double** et ça marche très bien ^^)
Le problème qui se pose pour moi c'est qu'en mathlab le 1er éléments d'une matrice est (1,1) et le dernier (n,m) alors que bien entendu l’arithmétique des pointeurs en c++ impose de débuter à (0,0) et finir à (n-1,m-1).
Est-il possible pour des raisons de gain de tps de modifier cette contrainte pour ne pas avoir à déréférencer à chaque fois mes boucles, ce qui me ferrait gagner pas mal de tps ...
en gros avoir des pointeurs dont le 1er termes et [1][1] ... [n][m]
Merci d'avance pour vos suggestions.
|
|
mercredi 23 mars 2011 à 14:00:21 |
Re : déréférencer de pointeur

CptPingu
|
Non, ce n'est pas possible :)
Un tableau en C, est une adresse. Donc faire tab[0] équivaut à l'adresse du pointeur tab (décalage de 0), alors que tab[2] correspond à l'adresse de tab décalé de deux éléments (décalage de "type * 2"). C'est la raison pour laquelle on commence à 0. C'est une base très importante du langage, et ce n'est pas bien entendu pas modifiable.
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
mercredi 23 mars 2011 à 16:44:00 |
Re : déréférencer de pointeur

sdrh
|
Sauf erreur de ma part. une grande partie Mathlab n'est elle pas codé en C ?
Dans ce cas comment ce fait il que ce soit le cas sous mathlab ?
Je te remercie CptPingu pour ta réponse.
En fait ce que j’espérais n'est pas tant de modifié le langage C  en soit mais une technique ou astuce pour palier ce problème  .
J'avais par exple pensé d'initialiser ma première ligne et ma première colonne à zéro et d'augmenter de +1 ligne, +1colonne la dimension de ma matrice pour ensuite pouvoir travaillé sur la sous matrice. (idée certes stupides ... vu qu'on consomme de la mémoire pour rien) quoi qu'il en soit c'est une optimisation ou astuce dans ce sens que je cherchais !
En Espérant avoir été plus clair.
|
|
mercredi 23 mars 2011 à 17:00:15 |
Re : déréférencer de pointeur

CptPingu
|
Matlab, a peut être été codé en C, mais son implémentation est différente. Si je code mon propre langage en C, je peux faire commencer les tableaux à la valeur que je veux (pourquoi pas 36 :p).
Le C a été conçu pour que les tableaux commencent à 0, et ça ne peut être changé.
J'ai du mal à cerner en quoi c'est un problème gênant. Si tu as tab[1], tu mets à la place tab[0] et c'est reglé.
Si tu as l'habitude de faire:
for (int i = 1; i <= size; ++i)
tu remplaces par:
for (int i = 0; i < size; ++i)
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
mercredi 23 mars 2011 à 17:02:28 |
Re : déréférencer de pointeur

CptPingu
|
J'oubliais, rien ne t'empêche de faire une fonction à la place.
Ex:
Au lieu de tab[0][0], tu peux faire un get(tab, 1, 1).
Avec get:
Code C/C++ :
int get(int** tab, int x, int y)
{
return tab[x - 1][y - 1];
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
mercredi 23 mars 2011 à 17:44:29 |
Re : déréférencer de pointeur

sdrh
|
Oui certes mais ceci est simple qd les cases auxquelles tu veux accéder sont linéaire.
Je m'explique :
prenons un vecteur - je souhaite accéder au composante de la forme 3*i-2, sous mathlab.
ca donne simplement
for i=1:N
T(3*i-2);
en c++ :
for (i=0 ; i<N ; i++) // on décale la boucle jusque là ok !
T[3*i]; // il faut aussi décaler l'indice des Tab
ceci est un exple tout bête, qui devient vite compliqué qd tu travailles sur des matrices et que tu récupères des valeurs d'autre matrice ds tes boucles...
C'est pas infaisable ça fait juste perdre un peu de tps de décaler tes indices,
ça permet surtout de comparer plus facilement les deux codes.
D'où ma question ^^
|
|
mercredi 23 mars 2011 à 17:58:23 |
Re : déréférencer de pointeur

CptPingu
|
En C++:
Code C/C++ :
template <typename T>
T get(T* tab, int x)
{
return tab[x - 1];
}
template <typename T>
T get(T** tab, int x, int y)
{
return tab[x - 1][y - 1];
}
template <typename T>
T get(T*** tab, int x, int y, int z)
{
return tab[x - 1][y - 1][z - 1];
}
Ensuite, tu peux faire:
Code C/C++ :
for (int i = 1 ; i <= N ; ++i)
get(T, 3 * i - 2);//T[3 * i - 2];
for (int i = 1 ; i <= N ; ++i)
for (int j = 1 ; j <= N ; ++j)
get(T, 3 * i - 2, 3 * j - 2);//T[3 * i - 2][3 * j - 2];
Fonctionne avec n'importe quel type de tableau, de 1 à 3 dimensions.
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
mercredi 23 mars 2011 à 18:50:24 |
Re : déréférencer de pointeur

sdrh
|
en effet en effet ... ton idée m'a bien inspiré :
j'ai modifié ma class Matrice comme ceci :
Code C/C++ : double & Matrice::operator()(unsigned int i, unsigned int j)
{
if( i>= nbre_lignes || j >=nbre_colonnes)
{
throw std::string("Hors plage de valeurs");
}
return lignes[i-1][j-1]; // j'avais mis [i][j]
}
Comme j'ai fait cette classe il y as un petit moment déjà ça ne m'est même pas venu à l'idée ^^
En tout cas Merci !!!!!! 
|
|
Cette discussion est classée dans : classe, pointeurs, pointeur, avance, déréférencer
Répondre à ce message
Sujets en rapport avec ce message
Problème de pointeur [ par ngryman ]
Salut à vs, g un gros pb inexplicable pr moi, alors si qqn trouvait la solution ce serait un dieu.Voilà je m'explik, j'ai une classe X qui possède un
Pointeurs [ par Nykkoo ]
Salut,Etant debutant dans la programmation en C, j'arrive aux chapitres des pointeurs (sniff) et je me trouve confonté aux problemes suivants :double
pointeurs [ par djkill55 ]
bonjour,j aimerai savoir cmt on fait un scanf sur une suite de pointeur, je m explike, je dois faire ca ms sans utiliser les [] , cad les tableux, ms
Pointeur vers une fonction dans une classe ... [ par MoDDiB ]
Supposons que j'ai la fonctionvoid Fonction(int test,int t);appartenant a la classe Cclass.Quelle est la syntaxe pour creer un pointeur vers cette fon
pourkoi pointeur vers classe ? [ par Arkko ]
Quelquun peut m'expliquer pourquoi ce code cree un pointeur NULL vers un classe et apres quil declare un variable de type cMyD3dApplication et met une
pointeur sur CDialog a partir de CView [ par stremblay77 ]
Bonjour Comment faire pour obtenir un pointeur sur une classe dérivée de CDialog à partir d'une classe dérivée de CView ou de CRichEditView... SVP bes
Classe C++ et pointeurs [ par cybermax62 ]
je veux utiliser des pointeurs sur des classes. j'écris mon code comme celui-ci :typedef class widget * pwidget;class widget{public:; char * name_s;
(__cdecl *) => kesako? [ par Oeil_de_taupe ]
Bonjour tout le monde, J'ai créé deux classes qui représentent un protocole pour envoyer des données entre deux PC. Lors de l'appele de leur construc
pb pointeurs [ par Arnaud16022 ]
bonsoirj'ai un peu de mal avec les pointeurs et ma fonction marche pas trop.Le but est de passer une variable en parametre a une fonction, qui va stoc
Pointeurs de pointeurs [ par miximog ]
Bonjour a tous enfin bonsoir ;) Enfaîte j'ai lu 2 tuto sur les pointeurs donc je commence a bien comprendre la notion de pointeurs, mais il y a une n
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|