*取址、&取值
- 取址 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
}