取址運算符&
- 取址運算符
&
用來取得其操作數的地址。 - 如果操作數 x 的類型爲 T,則表達式 &x 的類型是 T 類型指針(指向 T 的指針)。
- 取址運算符的操作數必須是在內存中可尋址到的地址。該運算符只能用於函數或對象
間接運算符 *
- 當已具有一個指針,並且希望獲取它所引用的對象時,使用間接運算符
*
(indirection operator),有時候這會被稱爲解引用運算符(dereferencing operator)。 - 它的操作數必須是指針類型
- 如果 ptr 是指針,那麼 *ptr 就是 ptr 所指向的對象或函數。
例子
初始化指針,以指向某些對象或函數時,需要獲得這些對象或函數的地址
- *與&具有互補性
float x, *ptr;
*&x代表x
&*ptr代表ptr
&ptr代表指向ptr的地址,爲`**float`類型
- 定義一個float指針ptr,指向x的地址
float x, *ptr = &x;
等同於
float x, *ptr;
ptr=&x;
- 示例
int *p1,a=1;
p1=&a;
cout<<"p1="<<p1<<endl;
cout<<"*p1="<<*p1<<endl;
int *p2=&a;
cout<<"p2="<<p2<<endl;
cout<<"*p2="<<*p2<<endl;
++*p2;
cout<<"p1="<<p1<<endl;
cout<<"*p1="<<*p1<<endl;
cout<<"p2="<<p2<<endl;
cout<<"*p2="<<*p2<<endl;
cout<<"a="<<a<<endl;
int **p3=&p1;
cout<<"&p1="<<&p1<<endl;
cout<<"p3="<<p3<<endl;
cout<<"*p3="<<*p3<<endl;
cout<<"**p3="<<**p3<<endl;
p1,p2
的值保持不變,但是a
的值變成了2
。
p3
爲**int
類型,*p3
的值等於p1,p2
,**p3
的值等於a
輸出爲
p1=0x61fe04
*p1=1
p2=0x61fe04
*p2=1
p1=0x61fe04
*p1=2
p2=0x61fe04
*p2=2
a=2
&p1=0x61fe08
p3=0x61fe08
*p3=0x61fe04
**p3=2