Udostępnij za pośrednictwem


Na podstawie wskaźników (C++)

Programu Microsoft

__based Słów kluczowych pozwala zadeklarować wskaźniki na podstawie wskaźników (wskaźniki, które są przesunięcia z istniejących wskaźników).

type __based( base ) declarator 

Uwagi

Wskaźniki oparte na adresach wskaźnik są jedynymi __based ważne w 32-bitowy lub 64-bitowych kompilacje słowa kluczowego.Kompilator C/C++ firmy Microsoft 32-bitowych na podstawie wskaźnika jest 32-bitowego przesunięcia od wskaźnika 32-bitowe podstawowej.Podobne ograniczenia posiada dla 64-bitowych środowisk, gdzie na podstawie wskaźnika jest 64-bitowe przesunięcie z base 64-bitowych.

Jednym z zastosowań dla wskaźników na podstawie wskaźników jest trwałe identyfikatorów, które zawierają wskaźniki.Połączonej listy, która składa się ze wskaźnika na podstawie wskaźników mogą być zapisane na dysku, a następnie — załadowano ponownie za pomocą wskaźników, ważny do innego miejsca w pamięci.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 jest przypisany adres pamięci przydzielone w pewnym momencie później w programie.Połączonej listy jest przeniesiona względem wartości vpBuffer.

[!UWAGA]

Utrwalanie identyfikatory zawierające wskaźniki można również wykonać za pomocą pliki mapowane w pamięci.

Podczas dereferencji na podstawie wskaźnika, podstawy muszą być wyraźnie określone albo niejawnie znany poprzez deklarację.

Dla zgodności z poprzednimi wersjami _based jest synonimem dla __based.

Przykład

Poniższy kod demonstruje, zmiana na podstawie wskaźnika przez zmianę jej podstawy.

// 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łów kluczowych języka C++

alloc_text