C语言 | * 与 &

取址运算符&

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

猜你喜欢

转载自blog.csdn.net/stone_fall/article/details/106868217