基底指標 (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;
}