Bonjour,
J'aimerais pouvoir utiliser en C des adresses mémoires comme des valeurs entières. Par exemple si j'ai la ligne suivante :
Char *p = "bonjour".
J'aimerais pouvoir faire des opérations telles que : p * 2 ( Oui ! Je veux bien multiplier l'adresse de p par deux.) et obtenir un résultat en entier. (et si possible de façon portable)
En fait, je travaille sur un projet dans lequel j'ai besoin de retrouver des indices d'objets rangés dans un tableau de pointeurs sur objets, à partir de l'adresse de ses objets. Et ce besoin est fréquent. par exemple :
J'aimerais pouvoir à partir d'une adresse d'objet (Objet *) obtenir l'indice i de cet objet dans le tableau. (ce besoin est récurrent...). J'ai donc envisagé d'utiliser une table de hashage pour associer les adresses aux indices et accéder dans les meilleurs délais aux indices plutôt que de parcourir tout le temps le tableau. Sauf que dans ma fonction de hashage, je fais des opérations sur entier (pour multiplier la clé , la diviser, décalage de bits...). Hors ces opérations sont impossibles sur des pointeurs (le compilo gueule). Je suis sur une machine 64 bits et j'aimerais que la solution puisse marcher indépendament de la plateforme matérielle/logicielle. Au cas ou ce serait impossible, j'aimerais savoir comment pourrais-je hasher des adresses sans multiplications et tout et tout. Ou comment pourrais je résoudre mon problème autrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 //j'ai le tableau d'objet suivant Objet **tab = malloc(sizeof(Objet *) * 1000); for(i = 0; i < 1000; i++) { Objet *obj = creer_objet(...); tab[i] = obj; // Ensuite obj est aggrégé à d'autres structures de données (nombreuses) qui // sont en fait les structures métiers. Le tableau n'est qu'un outil. }
Merci.
Partager