最近看程序的时候对&和*的理解仍是有点问题,索性写篇文章重头理清一下。ide
首先,左值和右值的问题。spa
咱们知道对于*和&,左值和右值的含义是不同的,如指针
*表示的是指针,int 是指针的类型,int *p是定义一个整型的指针p,指向的是变量a的地址.而等式右边的&是取地址,&a是变量a的地址。能够看出,左边的*和右边的&是相对应的,咱们只能把右边变量的地址值赋给指针,而不能把变量直接赋给指针。ci
综上,string
*做为左值时,是类型,int *p能够理解为int* p,p是整形指针类型,存储的值是与整形指针类型对应的地址类型&a,并且这个地址中存储的值也是整数类型的,地址&a(p)能够以整数的形式显示出来,可是不能接受整数的赋值。it
*做为右值时,是操做,p自己是指针类型,可是p的值是地址,*p能够理解为经过指针类型p中的地址去找到地址中的值。io
&做为左值时,是类型, int &p=a是定义一个整形的引用p.class
&做为右值时,是操做,取地址的操做。import
版权声明:本文为博主原创文章,未经博主容许不得转载。变量