最近看程序的時候對&和*的理解仍是有點問題,索性寫篇文章重頭理清一下。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
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。變量