Udostępnij za pośrednictwem


Wskaźniki bazowe (C++)

Specyficzne dla firmy Microsoft

Słowo kluczowe __based umożliwia zadeklarowanie wskaźników na podstawie innych wskaźników (wskaźniki, które są przesunięciami innych wskaźników).

type __based( base ) declarator

Uwagi

Wskaźniki oparte na adresach wskaźników są jedyną prawidłową postacią słowa kluczowego __based w kompilacjach 32- i 64-bitowych.Dla 32-bitowego kompilatora Microsoft C/C++, wskaźnik bazowy jest 32-bitowym przesunięciem bazy wskaźnika 32-bitowego.Podobne ograniczenie istnieje w środowiskach 64-bitowych, gdzie wskaźnik bazowy jest 64-bitowym przesunięciem bazy 64-bitowej.

Jedno z zastosowań dla wskaźników bazowych odnosi się do trwałych identyfikatorów zawierających wskaźniki.Połączona lista, która składa się ze wskaźników opartych na wskaźnikach może być zapisana na dysku, a następnie ponownie załadowana do innego miejsca w pamięci, z wciąż prawidłowymi wskaźnikami.Na przykład:

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

Wskaźnik vpBuffer ma przypisany adres pamięci przydzielonej w pewnym późniejszym momencie w programie.Połączona listy jest przenoszona względem wartości vpBuffer.

[!UWAGA]

Można uzyskać trwałe identyfikatory zawierające wskaźniki także za pomocą plików mapowanych w pamięci.

Podczas wyłuskiwania wskaźnika bazowego, baza musi być jawnie określona lub niejawnie znana poprzez deklarację.

W celu zachowania zgodności z poprzednimi wersjami _based jest synonimem dla __based.

Przykład

W poniższym kodzie przedstawiono zmianę wskaźnika bazowego, zmieniając jego bazę.

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

Zobacz też

Informacje

Słowa kluczowe języka C++

alloc_text