在c++的學習過程中,引入了引用的概念,那麼引用和指標有什麼區別呢?
首先,他們都是位址的概念,指標指向乙個記憶體塊,它的內容是記憶體塊的位址,引用是某塊記憶體的別名。指標是乙個變數的位址,而引用則是變數的別名。
首先我們先定乙個指標與乙個引用
通過反彙編檢視,發現其實在底層,引用是通過指標來實現的
我們先給指標進行初始化,只宣告引用而不初始化,發現編譯器報錯,提示未初始化引用。
之後只宣告一下指標,發現指標可以不初始化,但編譯器會提示警告(指標未初始化,稱之為野指標)。
我們將指標指向p的位址,將b賦給引用q,通過執行結果發現,指標可以改變所指向的記憶體塊,而引用則是初始化之後,就只能一直使用初始化的記憶體塊,但可以改變其內容
嘗試給引用初始化為null,報錯,引用不能為null,為什麼引用不能為空呢。引用是記憶體單元的別名,沒有記憶體單元怎麼起名。
我們使用sizeof指標和引用,通過結果,可以發現sizeof指標表示的是指標的大小,而sizeof引用得到的是所指變數的大小。
分別給指標進行++,引用進行++;可以觀察到,指標++是對位址進行偏移,而引用++則是對所引用 物件內容進行++
總結如下:
引用的底層其實是通過指標來實現的
指標是個實體,而引用只是乙個別用
引用必須被初始化,而指標不必
引用只能在第一次使用的時候初始化,之後不能被改變,而指標可以改變所指物件。
不存在指向空的引用,但存在指向空的指標,即沒有空引用,但有空指標。
sizeof引用得到的是所指變數的大小,sizeof指標得到的是指標本身的大小
引用與指標的++意義不同
可以存在多級指標,但不能存在多級引用
程式為指標變數分配記憶體區域,而引用不需要分配記憶體區域 。
指標和引用作為函式引數傳遞的時候也有區別,用指標傳遞引數,可以實現對實參進行改變的目的,而將引用作為函式引數傳遞時,實際上傳遞的是形參本身,而不是實參的乙個拷貝,因此對形參修改其實是對實參進行修改。
指標引用和引用指標的區別
c 在傳參的過程中,指標 和指標引用 是有區別的。雖然,我們往往可以通過傳指標然後通過間址訪問來修改指標所指向物件的值,同樣,通過引用也可以直接修改物件的值。但是,當傳指標的時候有乙個問題,就是,我們雖然可以通過指標來修改指標所指向物件的值,但是我們沒有不能直接修改指標的內容 也就是指標變數存放的位...
傳指標和傳指標引用的區別 指標和引用的區別(本質)
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...
傳指標和傳指標引用的區別 指標和引用的區別(本質)
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...