任何人都可以解釋指針的不同類別(如野指針)嗎?什麼是不同類別的指針?
回答
- 有效指針:一個指向一個真正的對象在內存
- 無效指針:一個指向內存不是什麼應該是。
- NULL pointer:一個指針,其值爲0,因此不指向任何東西。
- 懸掛指針(有時也是野指針):一個指向已被刪除/釋放的內存。
- 智能指針:根本不是一個指針,而是一個像指針一樣工作的對象,但爲您管理內存。
儘管NULL常量的計算結果爲零,但AFAIK NULL指針的值不需要爲零(位模式可能因機器而異)。 – 2010-05-27 07:27:42
我可以將「Dangling」和「Invalid」分類爲同一件事。實際上也是空的,但它的驗證無效。 – 2010-05-27 07:28:04
但從邏輯上說,它們是不同的。如果你超出界限或者錯誤地將它分配到了錯誤的地址,那麼指針就是無效的;如果你忘記它已經被釋放了,它就會搖晃。 – 2010-05-27 07:32:23
這裏是你的答案:
...添加正交史蒂夫的答案 -
- 指針變量(
int*
,char*
,也void*
這是一個特殊的僞類型必須始終提領前投也。指向指針的指針。) - 指向函數的指針(
void(*)()
,int(*)(int)
)等。)
區別非常重要,因爲一個家庭不能投入其他,反之亦然。
也有函數指針指向代碼而不是對象。並指向成員,這需要一個類的實例來完全取消引用。指向成員函數的指向代碼和要求的指針,以及一個類的實例來完全解引用。
還有幾種不同類型的智能指針。這些用於包裝動態內存分配,並跟蹤底層數據的所有權。當沒有人再擁有數據時,動態內存將自動釋放。這裏的三大重點是範圍指針,共享指針和弱指針。作用域指針只有一個所有者,當它們超出作用域時,它們將被刪除[參見C++中的std::auto_ptr
和C++ 0x中的std::unique_ptr
]。共享指針可以有很多所有者,並且直到所有所有者都完成它們之後,內存纔會被釋放。弱指針是這些形式中的一種,但它們並不總是保持嚴格的所有權;他們在需要時請求所有權,並且如果相應的共享指針已經用盡所有者,則該請求被拒絕。
指向成員的+1;) – 2010-05-27 07:46:59
指向成員的指針需要*實例*,而不是要取消引用的類。 – 2010-05-27 09:22:52
對不起,對,你是對的。 – 2010-05-27 09:27:36
你也可以根據自己的「不變性」添加分類和排序指針的另一個層面:
指向一個const - 你可以改變指針,但是不知道它指向。
例子:
int i = 42;
const int* pi = &i;
或
int i = 42;
int const* pi = &i;
常量指針 - 你不能改變什麼指針指向。
例子:
int i = 42;
int* const pi = &i;
常量指針到一個const - 你不能改變什麼指針指向,你不能改變指針本身。
例子:
int i = 42;
const int* const pi = &i;
- 1. 不同類型的指針有什麼區別?
- 2. 什麼是指向指針的指針?
- 3. 什麼區別=指針
- 4. 爲什麼STL算法針對不同類別調用不同?
- 5. 指針指針的意義是什麼?
- 6. 指針指針的語法是什麼?
- 7. 類指針*的含義是什麼?
- 8. 什麼類型的指針
- 9. C - 爲什麼指針指針與指向數組的指針不同?
- 10. C:爲什麼指針和指針有不同的值?
- 11. 什麼是強指針和弱指針
- 12. 指針指針是什麼意思?
- 13. C++指向新類的類指針與指向類對象的指針之間有什麼區別?
- 14. 爲什麼我的指針不是NULL?
- 15. 指向指針的指針與C中指針的地址有什麼區別?
- 16. 爲什麼我們需要指針的不同數據類型?
- 17. 不同結構類型指針指向指針結構指針
- 18. 查找指針的向量類不同類別
- 19. 爲什麼不是根類的元類的超類是一個NULL指針?
- 20. 指向不同類型的指針
- 21. 指向不同類型的C++指針
- 22. 什麼是懸掛指針
- 23. 什麼是函數指針?
- 24. 什麼是裸指針?
- 25. 什麼是指針聲明?
- 26. 什麼是指針攪拌?
- 27. 什麼是參考指針?
- 28. 什麼是合成指針?
- 29. 爲什麼Java不是使用指針
- 30. 爲什麼不是指針遞增
你能澄清?什麼類別?野指針不是一個標準術語。 – Naveen 2010-05-27 07:18:22
野指針是事實上的標準術語,意思是指向某個隨機位置的未初始化的指針變量。有關其他類似條款,請詢問Google。 – 2010-05-27 07:25:12
從來沒有聽說過野生指針,我一直在這樣做了一段時間。 – 2010-05-27 07:39:02