На основе указатели (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;
}