c++指標主要包括一下四個方面:
1、變數指標
2、函式指標
3、類內部變數指標
4、類內部函式指標
指標又可以稱謂地址,在32位的CPU上,CPU一般是由32根地址線組成,所以地址的大小佔用32位即4個位元組,同理可以推算出指標的大小佔用4個位元組;
但是指標卻又不同於地址,豐富於地址,用公式來說明:
“指標” = “指標所代表的地址” + "地址內資料的資料型別";
暫時只列提綱,內容會逐漸增加
工具/原料
win7 x64
Visual Studio 2013
變數指標
int* pnPointer;
定義一個變數指標 pnPointer, 佔用的記憶體大小為4個位元組,pnPointer沒有被初始化。
int pnValue[10];
定義一個數組,陣列的起始地址指向自己,大小是 sizeof(int) * 10 = 40;
int* ppnValue[10];
指標陣列,可用來存在指標(地址)的陣列;
相鄰的兩個元素的地址間隔是4
int (*ppnValue)[10];
二維矩陣,每行元素的數目是10個,每行位元組數 10 * sizeof(int) = 40;
相鄰的兩個元素的地址間隔是 10 * sizeof(int) = 40;
this 類內部一個指向自己的指標,如下圖:
可以發現 this 指標的生命週期要早於 pA 指標,this指標在建構函式產生時就已經存在,而 pA 指標只有在建構函式返回後再被賦值;
函式指標2
void (*fpFun)() = tst;
fpFun 的值並不等於 tst,而是 tst 的label所對應的值
類內部變數指標3
class A
{
public:
int a;
};
int A::*p = &A::a;
返回的是 變數a在類A中的偏移
A a;
a.*p = 3;
類內部函式指標4
class A
{
public:
void tst() {};
};
void (A::*pFun)() = &A::tst;
A a;
(a.*pFun)();