取址运算符&
- 取址运算符
&
用来取得其操作数的地址。 - 如果操作数 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