Condividi tramite


Puntatori base (C++)

Specifici di Microsoft

__based la parola chiave consente di dichiarare i puntatori basati sui puntatori (puntatori che sono offset dai puntatori esistenti.

type __based( base ) declarator 

Note

I puntatori in base agli indirizzi del puntatore sono l'unico del form __based parola chiave valida in 32 bit o compilazioni a 64 bit.Per il compilatore a 32 bit C/C++ Microsoft, un puntatore basato è un offset pari a 32 bit in base al puntatore a 32 bit.Contiene simili di una restrizione per gli ambienti a 64 bit, in cui un puntatore basato è un offset pari a 64 bit in base a 64 bit.

Un utilizzo dei puntatori basati sui puntatori riguarda gli identificatori persistente che contengono puntatori.Un elenco collegato costituito dai puntatori in base a un puntatore può essere salvato su disco, pertanto essere ricaricatoe a un altro punto della memoria, con i puntatori che rimangono validi.Di seguito è riportato un esempio:

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

il puntatore vpBuffer viene assegnato l'indirizzo di memoria allocato in un secondo momento successivo durante il programma.L'elenco collegato quest'ultimo viene riassegnato al valore di vpBuffer.

[!NOTA]

Mantenere gli identificatori che contengono puntatori può essere eseguito utilizzando file mappati alla memoria.

Nella dereferenziazione di un puntatore basato su, la base deve essere specificata in modo esplicito o implicito nota nella dichiarazione.

Per garantire la compatibilità con le versioni precedenti, _based è sinonimo di __based.

Esempio

Il codice seguente viene illustrato modificare un puntatore basato modificando il relativo 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;
}
  

Vedere anche

Riferimenti

Parole chiave C++

alloc_text