Forms-basierte Zeiger (C++)

Microsoft-spezifisch

Das __based-Schlüsselwort ermöglicht es Ihnen, Zeiger auf Zeiger (Zeiger, die Offsets von vorhandenen Zeigern sind) zu deklarieren.

type __based( base ) declarator 

Hinweise

Zeiger auf Zeiger adressen sind die einzige Form des __based-Schlüsselworts, das im 32-Bit- oder 64-Bit-Kompilierungen gültig ist.Für den Compiler 32-Bit-C/C++ basierter ein Zeiger ist ein Microsoft 32-Bit-Offset 32-Bit-Zeiger aus einer Seite.Eine ähnliche Einschränkung wird für 64-Bit-Umgebung an, in der ein basierter ein Zeiger 64-Bit-Offset aus der 64-Bit-Basis ist.

Eine Verwendung von Zeigern auf Zeiger ist für dauerhafte Bezeichner, die Zeiger enthalten.Eine verknüpfte Liste, die aus Zeigern auf Grundlage eines Zeigers besteht, kann dem Datenträger gespeichert sind, dann an eine andere Stelle im Arbeitsspeicher neu geladen werden, wenn die Zeiger gültig bleiben.Beispiele:

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

Der Zeiger vpBuffer wird die Adresse des Arbeitsspeichers belegt zu einem neuerer Stelle im Programm zugewiesen.Die verknüpfte Liste wird relativ zum Wert von vpBufferverschoben.

HinweisHinweis

Das Beibehalten von Bezeichnern, die Zeiger enthalten, kann auch erzielt werden, indem Speicherabbilddateienverwendet.

Beim Erstellen eines basierte Zeiger dereferenziert, muss die Basis entweder durch die Deklaration bekannt ist implizit oder explizit angegeben werden.

Aus Gründen der Kompatibilität mit früheren Versionen _based ist ein Synonym für __based.

Beispiel

Im folgenden Code wird das Ändern eines Zeigers basierte, indem er die zugehörige Basis geändert wird.

// 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;
}
  

Siehe auch

Referenz

C++-Schlüsselwörter

alloc_text