Sdílet prostřednictvím


Základní ukazatelé (C++)

Specifické pro Microsoft

Klíčové slovo __based umožňuje deklarovat ukazatele založené na ukazatelích (ukazatele posunuté oproti existujícím ukazatelům).

type __based( base ) declarator

Poznámky

Ukazatele založené na adresách ukazatelů jsou jedinou formou klíčového slova __based, která je platná v 32bitových nebo 64bitových kompilacích.Pro 32bitové kompilátory jazyka C/C++ společnosti Microsoft je ukazatel základní třídy 32bitovým posunem oproti 32bitovému základu ukazatele.Podobné omezení platí pro 64bitová prostředí, kde je ukazatel základní třídy 64bitovým posunem oproti 64bitovému základu.

Jedním použitím ukazatelů na základě ukazatelů jsou trvalé identifikátory, které obsahují ukazatele.Propojený seznam, který se skládá z ukazatelů založených na ukazateli lze uložit na disk a následně jej lze znovu načíst na jiné místo v paměti, při současném zachování platnosti ukazatelů.Příklad:

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

Ukazateli vpBuffer je přiřazena adresa paměti, která je přidělena v aplikaci později.Propojený seznam je přemístěn vzhledem k hodnotě vpBuffer.

[!POZNÁMKA]

Zachování identifikátorů obsahujících ukazatele lze dosáhnout také pomocí souborů mapovaných do paměti.

Při dereferenci ukazatele základní třídy musí být základ buď explicitně zadán, nebo implicitně znám prostřednictvím deklarace.

Z důvodu kompatibility s předchozími verzemi je klíčové slovo _based synonymem klíčového slova __based.

Příklad

Následující kód ukazuje změnu ukazatele základní třídy prostřednictvím změny jeho základu.

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

Viz také

Referenční dokumentace

Klíčová slova jazyka C++

alloc_text