注:參考自bilibili系列視頻,指針和引用視頻https://www.bilibili.com/video/BV1kT4y177WE
指針
指針是在內(nèi)存中的四字節(jié)存儲空間,指針存儲的內(nèi)容就是一個地址,根據(jù)這個地址可以找到另外一片內(nèi)存,指針就是這片內(nèi)存的索引。簡單的講,指針就是一種保存變量地址的變量。
引用
在編譯器層面上,引用就是指針,因為把代碼反匯編之后,指針和引用生成的匯編代碼是一模一樣的。指針和引用是在語法層面上的概念。
指針和引用在語法層面上的區(qū)別
初始化時的區(qū)別
指針可以不初始化,即野指針。
引用不可以不初始化,會報錯,更安全。
再次賦值時的區(qū)別
第二次賦值a時,指針會指向a,而引用還是指向第一個地址,且給第一個地址賦值為a。
指針再次賦值是改變的指針指向,即改變了指針存的地址值,不會對地址中的內(nèi)容做改變。
引用始終指向第一個地址,再次賦值不會改變指針指向,把其指向的地址內(nèi)容改為所賦的值。
代碼層面(引用):
int a = 3;
int &p = a;
p = 4; //這里相當(dāng)于 a=4
++操作
指針++操作,是根據(jù)指針存的數(shù)據(jù)類型對地址的偏移。
引用++操作,是對地址中內(nèi)容++操作,如果存int值,就是對int值+1。
sizeof()
對指針sizeof(),在大部分機(jī)器上,結(jié)果都是4字節(jié)。
對于引用 sizeof(),是該引用類型的長度,如果該引用是類類型,類中有2個int,那么sizeof()為2*4=8字節(jié);
技術(shù)總結(jié)
引用是指針的限制版本,讓引用更安全。指針可以是野指針,引用不能。平時編程時,建議在能使用引用的情況下,就不要輕易使用指針,當(dāng)然,在操作數(shù)組或者大面積內(nèi)存時,用指針更好。