基于指针(C++)
Microsoft 专用
__based 关键字使您可以将指针声明基于指针 (来自现有指针的偏移量) 的指针。
type __based( base ) declarator
备注
基于指针地址的指针是 __based 关键字的唯一窗体活动在 32 位或 64 位生成。 对于 Microsoft 32 位 C/C++ 编译器,基于指针是从 32 位指针基础的 32 位偏移量。 一个类似的限制为 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;
}