На основе указатели (C++)

Только для систем Microsoft

__based ключевое слово позволяет объявлять указатели на основе указателями (указателей, смещения из существующих указателей).

type __based( base ) declarator 

Заметки

Указатели на основе адреса указателя единственная форма __based допустимый ключевого слова в компиляциях 32 или 64.Для компилятора microsoft C/C++ с пакетом обновления 32 (sp2), основанный 32 - смещение от указателя с пакетом обновления 32 (sp2) базового указателя.Подобное ограничение для 64-разрядных сред содержит 64, где 64 - смещение от указателя на 64 логарифма.

Одна использовать для указателей на основе указателями для постоянных идентификаторов, содержащих указатели.Связанный список, состоящий из указателей, основанных на указателе можно сохранить на диск, а затем перезапустить в другое расположение в памяти, указатели оставшиеся допустимым.Примеры.

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

указатель vpBuffer присвоит адрес памяти, выбранный на некотором более последнюю точку в программе.связанный список передислоцирован по отношению к значению vpBuffer.

ПримечаниеПримечание

Сохранение идентификаторов, содержащих указатели могут быть также выполнены с помощью сопоставленные в памяти файлы.

Разыменования указателя на основе, необходимо явно задать либо базового или неявно знать через объявление.

Для обеспечения совместимости с предыдущими версиями _based синоним __based.

Пример

Следующий Код демонстрирует изменение на основе указатель, изменять его.

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

См. также

Ссылки

Ключевые слова C++

alloc_text