指標,簡單的說就是在乙個變數中存放位址值,那麼這個變數就是指標;引用,就是給記憶體位址乙個別名,當然這個記憶體位址之前已經被取過名字了。
指標大小,和機器的定址線數相關,也和作業系統相關;比如說如果你的機器是64位機,但是你裝的系統是32位系統,那麼你的指標變數的大小應該還是4byte吧?沒有驗證過,只是猜想,有同學驗證過,歡迎討論。
引用大小,和其引用的變數相關,其實你就把引用當成正常的變數使用就對了,只不過這個引用變數和另外乙個變數都是同一塊記憶體的名字罷了。
區別:
指標,可以被修改,也就是乙個指標變數內部存的指標位址可以被修改為其他的位址值。而引用指正在初始化的時候引用到另外一塊記憶體,之後就改變不了了,這個改變不了是指你不能把這個引用引用到另外的一塊記憶體去了,你在程式裡面試試這樣修改就知道為什麼做不到了。
const int* a;常量指標,說明這個指標指向乙個常量的位址,這個指標指向的記憶體空間的值不能修改哦。
int* const b;指標常量,說明這個指標變數不能被修改了,也就是說你不能把這個指標變數重新賦值哦,你不能讓他指向別的記憶體位址了哦。
const int& c;常量引用,這個別名是給乙個常量所在記憶體塊取得哦,你就不能改變這個記憶體塊的內容了哦。
int& const d;引用常量,這個本身不存在哦,在程式裡面這樣寫通過不了編譯哦。因為引用本身就是作為另一塊記憶體的別名了,也做不到的哦。
引用的本質
簡單來說,c++內部引用的實現是借助了指標,比如說我們生命乙個引用int &x = y,那麼這個時候x中存放的是y的位址,我們在對x進行操作的時候,編譯器預設轉換成了(*p)的方式直接訪問y所在的記憶體塊。是這樣嗎?有待商榷呀?求教**有說明引用的機制。。。
就這麼一些了呢,比起別人寫了一大堆,這個還算簡潔了吧。。。
C語言你不知道的事(2)
記錄學習的第八天 今天還是分享一下c語言的一些比較愉快的知識點 1.switch語句中break的重要性 首先呢我們看一下 int x scanf d x switch x 這是一段再正常不過的swich語句 如果我們把所有的break刪掉,會出現什麼情況呢 是編譯報錯?還是什麼?x 嗯哼哼 答案是...
Gson 和 Fastjson 你不知道的事
背景 目前在公司負責的業務,主要是跟json資料打交道,fastjson gson都用,他們適用於不同場景。fastjson號稱是業界處理json效率最高的框架,沒有之一。但在某些場景下,效率最高的不一定 能適合你 來,先上兩道菜 第一道普通菜 public class user public us...
你不知道的 和
開發中,編寫有一定逼格的 是每個程式猿都追求的。經常用來判斷的符號 和 也經常用來定義變數哦,你知道嗎?邏輯與 在有乙個運算元不是布林值的情況下,就不一定返回布林值。比如以下情況 1 第乙個運算元是物件,返回第二個數 var myinfo console.log myinfo 2 輸出22 第二個運...