Partager via


Pointeurs basés sur (C++)

Spécifique à Microsoft

Le mot clé d' __based vous permet de déclarer des pointeurs selon les pointeurs (les pointeurs qui représentent des offsets des pointeurs existants).

type __based( base ) declarator 

Notes

Les pointeurs selon les adresses de pointeur sont le seul formulaire de le mot clé d' __based valide dans les compilations 32 bits ou 64 bits.Pour le compilateur 32 bits de Microsoft C/C++, un pointeur basé est un décalage 32 bits d'une base 32 bits de pointeur.Valable semblables d'une restriction pour les environnements 64 bits, où un pointeur basé est un décalage 64 bits de la base 64 bits.

Une utilisation pour les pointeurs selon les pointeurs est pour les identificateurs persistants qui contiennent des pointeurs.Une liste liée qui se compose des pointeurs selon un pointeur peut être enregistrée sur le disque, puis être rechargement vers un autre emplacement dans la mémoire, avec des pointeurs restant valides.Par exemple :

// based_pointers1.cpp
// compile with: /c
void *vpBuffer;
struct llist_t {
   void __based( vpBuffer ) *vpData;
   struct llist_t __based( vpBuffer ) *llNext;
};

Le pointeur vpBuffer est assigné l'adresse de la mémoire allouée à certains point ultérieurement dans le programme.La liste liée est déplacée par rapport à la valeur d' vpBuffer.

[!REMARQUE]

Persistance des identificateurs contenant des pointeurs peut également être effectuée à l'aide de fichiers mappés en mémoire.

En déréférencement de pointeur basé, la base doit être spécifiée explicitement ou implicitement connue via la déclaration.

Pour compatibilité avec les versions antérieures, _based est un synonyme de __based.

Exemple

Le code suivant montre modifier un pointeur basée en modifiant sa base.

// based_pointers2.cpp
// compile with: /EHsc
#include <iostream>

int a1[] = { 1,2,3 };
int a2[] = { 10,11,12 };
int *pBased;

typedef int __based(pBased) * pBasedPtr;

using namespace std;
int main() {
   pBased = &a1[0];
   pBasedPtr pb = 0;

   cout << *pb << endl;
   cout << *(pb+1) << endl;

   pBased = &a2[0];

   cout << *pb << endl;
   cout << *(pb+1) << endl;
}
  

Voir aussi

Référence

Mots clés C++

alloc_text