2019寒假C++学习笔记_指针(一)

指针:
  指针与引用类似,实现了对其他对象的间接访问,然而指针和引用还有很多不同点。
  一:指针本身就是一个对象,允许对指针进行赋值和拷贝操作,而且在指针的生命周期内可以先后指向多个不同的对象。
  二:指针无须在定义时赋初值,但会拥有一个不确定的值。
  指针定义开头必须为 *,如int *p=nullptr;,这里定义了一个空指针p。

引用不是对象,只是被绑定对象的别名
引用在定义时必须赋初值(绑定到一个对象上)

获取对象内存地址
  指针实际存放(指向)某个对象的内存地址,要想获取该内存地址,需要使用取地址符(&)。
  
使用指针访问对象
  若指针已经指向了一个有效对象,则允许使用解引用符*来访问该对象。
  
指针的赋值
  指针的赋值就是令指针存放一个新的内存地址,从而指向了一个新的对象。

int a=100,b=50; 
int *p = &a;//指针p指向了a的内存地址,使用&取地址符获得变量a的内存地址
cout << *p << endl; //使用解引用符来获取p指向的对象的内容
p=&b;
cout<< "*p的值为" << *p <

指向指针的指针
  指针像其他对象一样拥有自己的内存地址,因此允许把指针的地址再存放到另一个指针中。
  通过*的个数可以区分指针的级别,**表示指向指针的指针,***表示指向指针的指针的指针,以此类推。

int val = 100;
int *p = &val;
int **p1 = &p;
cout << "val的地址:" << &val << "   *P的地址:" << &p << "   **p1的地址" << &p1 << endl;
cout<<" **p1的值为:"<< **p1 << endl;
结果:val的地址:0000006AFD7AF714   *P的地址:0000006AFD7AF738   **p1的地址0000006AFD7AF758
     **p1的值为:100

2019寒假C++学习笔记_指针(一)_第1张图片

可以看到这三个对象各自拥有各自的指针,而同时指针p1的值包含指针p的地址,而指针p的值包含变量val的地址和值,所以最终指针p1也指向了变量val。
2019寒假C++学习笔记_指针(一)_第2张图片

绑定指针的引用
  因为引用本身并不是一个对象,所以指针并不能指向一个引用,但指针为对象,所以存在绑定指针的引用。

int val = 100;
int *p=nullptr; //定义一个空指针
int *&r = p; //定义一个引用r,绑定到 int 类型的指针上

//将引用r所绑定的对象:指针p指向变量val的地址
r=&val; 

//此处输出一下r的地址和p的地址,发现两者地址相同,证明引用r实际上为指针p的别名
cout << "引用r的地址为:"<< &r << "   指针p的地址为"<< &p <

你可能感兴趣的:(C++)