基于指针(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;
}
  

请参见

参考

C++关键字

alloc_text