当前位置:   article > 正文

C++知识点2——指针、引用基础_c++ 怎么使用引用的指针?

c++ 怎么使用引用的指针?

引用:

1.引用就是对象或变量的别名,但引用不是对象或变量

int a=10; int &b=a;

这里面,b就是变量a的另一个名字,对b操作就是对a操作,对a操作,b也会变化

  1. void testreference()
  2. {
  3. int a=10;
  4. int &b=a;
  5. b=5;
  6. cout<<a<<b<<endl;
  7. a=4;
  8. cout<<a<<b<<endl;
  9. }

 

2.因为引用一定是某个变量的别名,引用一定是和变量绑定在一起的,所以引用必须初始化

  1. int a=10;
  2. int &b;

 

3.因为引用不是对象,但是引用又要绑定一个对象,所以不能定义引用的引用

  1. int a=10;
  2. int &b=a;
  3. int &(&c)=a;

 

4.因为操作引用就是操作变量或者对象本身,所以对于内置类型,变量和其引用之间的类型要适配

  1. int a=10;
  2. float &b=a;

 

5.因为引用必须和变量进行绑定,所以非const引用不能绑定字面值

  1. int a=10;
  2. int &b=20;

 

所以,引用的基本特性就五个:1.不是对象,2.必须初始化,3.不能定义引用的引用,4.类型适配,5.不能绑定字面值

 

指针

6.指针就是变量的地址,可以通过引用访问变量,也可以通过指针访问变量,但是指针是对象,而引用不是,这是二者的根本区别

  1. void testpointer()
  2. {
  3. int a=10;
  4. int *p=&a;
  5. int *q;
  6. cout<<p<<endl<<q<<endl;
  7. }

通过上述代码,可以知道,指针可以不初始化(只是为了演示,不要这样做),但是引用必须初始化

另外,&符号既能表示引用,也是取地址符号,当&出现在=左侧时,是引用,在=右边就是取地址

 

7.因为指针是一个对象,所以可以定义指针的指针,但是不能定义引用的引用

  1. void testpointer()
  2. {
  3. int a=10;;
  4. int *p=&a;
  5. int *q;
  6. int **pp = &p;
  7. cout<<p<<endl<<q<<endl;
  8. cout<<pp<<endl;
  9. }

所以,指针的引用的不同点就是:1.引用必须初始化,指针不用,2.可以定义指针的指针,但是不能定义引用的引用,这两点的原因就是指针是变量,而引用不是(只是个别名)

 

8.指针所指向的数据的类型要和指针的类型一致

  1. float a=10;
  2. int *p=&a;

 

9.指针的引用

因为指针是对象,引用不是,所以可以定义指针的引用,但是不能定义引用的指针

  1. void testpr()
  2. {
  3. int i=0;
  4. int *pi=&i;
  5. int *&pr=pi;
  6. cout<<pr<<endl<<pi<<endl;
  7. *pr=4;
  8. cout<<i<<endl;
  9. }

int *&pr=pi;说明了如何定义一个指针的引用,可以从右向左读,

先看红色部分,我们知道有个对象叫pr,接着看到蓝色的&,我们知道pr是一个引用,

最后看到int *,就知道这个引用和一个int类型的指针绑定,这是指针就是pi

因为pr是pi的别名,所以对可以通过pr改变i

 

10.void 型指针

void型指针可以存放任意类型的指针(包括二级指针),但是不能对void型指针解引用,所以void*指针可以保护数据所在的内存不被修改

  1. void testvoidp()
  2. {
  3. double d=1.2;
  4. double *pd=&d;
  5. int i=11;
  6. int *pi=&i;
  7. void *vp=pi;
  8. vp=pd;
  9. cout<<__func__<<endl;
  10. cout<<*vp;
  11. }

 

参考:

《C++ Primer》

 

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/编程探险家/article/detail/63174
推荐阅读
相关标签
  

闽ICP备14008679号