C++ Pointer

totoro
3 min readJul 3, 2020

*取址、&取值

  • 取址 reference、&取值 dereference

現在你手上拿到 p=0x01 你希望獲取他的數值就是使用取值 *p 獲取內容

你現在手上拿到 p=0; 你希望獲取他的地址就是使用取址 &p 獲取地址

int *p

int * 可作為一種類型的名稱,表示p是一個int 型指標,而*p是一個int 型的變數

int i=0; int *p=i;

指標變數p指向變數i,而*p 代表 p 所指向的變數

指標運子* ,取值符號 &

&*p

先進行一次*p運算在取位址

*&p

先取位址,在進行*p運算

int *pint ; pint == &(*pint)

如果把* pint視為一個整數變數,那麼&(*pint)就是針對此變數位址,也就是指標變數pint所存的值,因此pint 始終等於 &(*pint)

dereference

就是取指针指向的对象的值(内容)

int * i;
int a = 5;

i = &a;

cout << (*i) << endl;

*i 指针i指向a,a的值为5

pass by value & pass by pointer & pass by refrence

pass by value

void pass_value(int v)
{
v=v+1;
}
int main()
{
int x=5;
pass_value(x);
cout<<"x= "<<x<<endl;
}

call by address pass pointer

void pass_pointer(int *p)
{

*p=*p+1;

}
int main()
{
int y=9;
pass_pointer(&y);
cout<<"y= "<<y<<endl;
}

pass by reference

refrence 指向主函數提供的真實參數 , 不是取址&

此處的& ,是告訴compiler 參數的傳遞方式是reference傳遞

void pass_refrence(int &r)
{
r++;
}

int main()
{
int z=10;
pass_refrence(z);
cout<<"z= "<<z<<endl;

}

i++ and ++i

int main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int *p;
p=&a[0];
cout<<*(p++)<<endl; //0
p=&a[0];
cout<<*p++<<endl;//0
p=&a[0];
cout<<*(++p)<<endl;//1
}

*(- -p) 與 a[- — i] 的作用相同, p先減一,再做*運算

*(p- -)與a[i --]的作用相同,先進行/*p運算,p再減一

*(++p) 與 a[+ + i]相同,p先加一,再做 * 運算

pointer v.s. reference

參考:https://bluelove1968.pixnet.net/blog/post/222284818

--

--