天天看點

指針和引用

指針

指針:指針是一個變量,隻不過這個變量存儲的是一個位址,指向記憶體的一個存儲單元;

引用:跟原來的變量實質上是同一個東西,隻不過是原變量的一個别名而已。

差別

  • 引用不可以為空,當被建立的時候,必須初始化,而指針可以是空值,可以在任何時候被初始化。
  • 指針可以有多級,但是引用隻能是一級(int **p;合法 而 int &&a是不合法的)
  • 指針的值可以為空,但是引用的值不能為NULL,并且引用在定義的時候必須初始化;
  • 指針的值在初始化後可以改變,即指向其它的存儲單元,而引用在進行初始化後就不會再改變了。
  • ”sizeof引用”得到的是所指向的變量(對象)的大小,而”sizeof指針”得到的是指針本身的大小;
  • 指針和引用的自增(++)運算意義不一樣;
  • 如果傳回動态記憶體配置設定的對象或者記憶體,必須使用指針,引用可能引起記憶體洩漏;
  • 其實,所謂的可以有const指針,但是沒有const引用 是指: const指針:如 int* const p; 是可以有的,此時指針包含的位址是常量,不能修改,但可修改指針指向的資料。 注意與 const int* p;的差別,此時指針指向的資料為常量,不能修改,但可以修改指針包含的位址,即指針可以執向其他地方。 而所謂沒有const引用,具體指沒有int& const a這種形式,而const int& a是有的。前者指引用本身即别名不可以改變,這是當然的,是以不需要這種形式,後者指引用所指的值不可以改變。

繼續閱讀