__based關鍵詞可讓您根據指標來宣告指標(與現有指標位移的指標)。 關鍵詞 __based Microsoft特定。
語法
type __based( base ) declarator
備註
以指標地址為基礎的指標是32位或64位編譯中唯一有效的關鍵詞形式 __based 。 對於 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_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;
}
1
2
10
11