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