1樓:砍侃看
關於指標和引用的區別,c++ primer是這麼說的:
1、引用總是指向某個物件;定義引用時沒有初始化是錯誤的。
2、賦值行為有差異。給引用賦值修改的是該引用所關聯的物件的值,而不是使引用於另一個物件關聯。引用已經初始化,就始終指向同一個特定物件。
舉個列子:
引用就像是你的身份證號,一出生就有了,而且終身不變,也不能把這個身份證號給別人。無論什麼時候,對這個身份證號做的操作,都是對你做操作。
指標就像是你公司的工號,可以把這個工號指向你,也可以改變這個工號讓它指向別人。
2樓:影者東昇
本質:引用是別名,指標是地址,具體的:
①從現象上看,指標在執行時可以改變其所指向的值,而引用一旦和某個物件繫結後就不再改變。這句話可以理解為:指標可以被重新賦值以指向另一個不同的物件。
但是引用則總是指向在初始化時被指定的物件,以後不能改變,但是指定的物件其內容可以改變。
②從記憶體分配上看,程式為指標變數分配記憶體區域,而不為引用分配記憶體區域,因為引用宣告時必須初始化,從而指向一個已經存在的物件。引用不能指向空值。
注:標準沒有規定引用要不要佔用記憶體,也沒有規定引用具體要怎麼實現。
③ 從編譯上看,程式在編譯時分別將指標和引用新增到符號表上,符號表上記錄的是變數名及變數所對應地址。指標變數在符號表上對應的地址值為指標變數的地址值,而引用在符號表上對應的地址值為引用物件的地址值。符號表生成後就不會再改,因此指標可以改變指向的物件(指標變數中的值可以改),而引用物件不能改。
這是使用指標不安全而使用引用安全的主要原因。從某種意義上來說引用可以被認為是不能改變的指標。
④不存在指向空值的引用這個事實,意味著使用引用的**效率比使用指標的要高。因為在使用引用之前不需要測試它的合法性。相反,指標則應該總是被測試,防止其為空。
⑤理論上,對於指標的級數沒有限制,但是引用只能是一級。如下:
int** p1; // 合法。指向指標的指標
int*& p2; // 合法。指向指標的引用
int&* p3; // 非法。指向引用的指標是非法的
int&& p4; // 非法。指向引用的引用是非法的
注意上述讀法是從左到右。
**c++中指標和引用的區別
3樓:千鋒教育
指標和引用的聯絡與區別
★ 相同點:
1. 都是地址的概念;
指標指向一內塊記憶體,它的容內容是所指記憶體的地址;引用是某塊記憶體的別名。
★ 區別:
1. 指標是一個實體,而引用僅是個別名;
2. 引用使用時無需解引用(*),指標需要解引用;
3. 引用只能在定義時被初始化一次,之後不可變;指標可變;
4. 引用沒有 const,指標有 const;
5. 引用不能為空,指標可以為空;
6. “sizeof 引用”得到的是所指向的變數(物件)的大小,而“sizeof 指標”得到的是指標本身(所指向的變數或物件的地址)的大小;
7. 指標和引用的自增(++)運算意義不一樣;
8.從記憶體分配上看:程式為指標變數分配記憶體區域,而引用不需要分配記憶體區域。
c 指標 區別,c 中別名 和指標 的區別
這是個運算優先順序的問題,由於 運算的優先順序大於 於是 abc 1先取出abc裡面的內容,再進行 1運算,結果就是abc內儲存的值加1 而 會改變運算順序,先算abc 1,這是將指標abc向下移了一位,再作 運算,也就是取出了指標abc所指位置下乙個位置裡面儲存的內容,這個運算一般只在陣列中進行,...
C語言 簡述一下“陣列和指標的關係”
我就是很煩 陣列是一類同型別變數的集合,類似於屬於上的集合的概念,數字也是有集合的,比如整數集,實數集等。陣列也是一個集合,陣列的名字是集合的名字,陣列後面的方括號裡的數字,表示這個集合的大小,陣列名前面的型別說明符,表示這個陣列是什麼型別的集合,比如 int a 5 a是陣列的名字,因為我們後面要...
關於c基類派生類的引用和指標,關於C 基類 派生類的引用和指標
1 首先回答第一個問題 用基類的指標指向派生類的物件,這樣做可以體現c 的重要特性 多型性。多型性其實也就是動態聯編。這樣做的好處是 當基類裡面定義了一個虛成員函式的時候,其派生類裡面定義了同名的函式可以實現覆蓋。你的基類指標指向那個物件,就呼叫那個物件的該方法。我舉個例子你應該就明白了 class...