fbpx
维基百科

空指標

程式語言中,空指標[1](英語:Null Pointer)是一個已宣告但並未指向一個有效物件的指標,許多程式利用空指標來表示某些特定條件,例如未知長度陣列的結尾或某些無法執行的操作。在可選擇型態(optional type)的程式語言中,空指標通常可以跟可為Null的型別(Nullable types)和空值(Nothing value)進行比較。

空指標與未初始化的英语Uninitialized_variable指標(uninitialized pointer)不同,空指標保證不會和有值的指標相等,而未初始化的指標則是要看所使用的程式語言或編譯器而定,在部分程式語言環境下,未初始化的指標無法保證不與有值的指標相等,他可能因為存有記憶體殘值而指向了某個有效物件。

空參照

程式語言中,空參照(英語:Null Reference)是一個與空指標類似的概念,是一個已宣告但其並未參照到一個有效物件的變數。東尼·霍爾在1965年發明了空參照,並作為ALGOL W程式語言的一部分[2]

歷史

查爾斯·安東尼·理察·霍爾(C. A. R. Hoare)在2009年表示他在1965年發明了空參照,並且將這項發明描述為“十億美元的錯誤”[2]

程式語言中的空指標

C語言

在C語言中,任何2個空指標都保證是相等的[4],其是由預處理器的巨集提供,即NULL,其被定義為用來表示空指標的常數值,在C99是透過隱含轉換或直接轉換成void*的整數值0來使用[5]

在C语言中,空指针的值表示为#define NULL (void *)0[6]

C語言標準並沒有規定記憶體位置0與空指標相同,隨然實際上記憶體位置0與空指標在大部分的情況下會是相同的。對空指標取值在C語言中是一個未定義行為,在實作上,取值時必須確保所取的指標不為空。

C++語言

C++語言中,同樣有繼承自C語言的NULL巨集可供使用,但在傳統上會優先使用整數零來表示空指標常數[7]。在C++11標準中已明確的引入一個常數(部分編譯器視之為關鍵字,如Visual Studio)nullptr做為表示空指標的常數[8]

nullptr

nullptr是C++11語言中的關鍵字,在C++11語言標準用來表示空指標的常數值。其型態為nullptr_t[8]

取值

因為空指標沒有指向有效的物件,所以若嘗試取值(Dereference,即,從該記憶體位置取出數值)的話,有機率導致程式執行時發生錯誤或立即崩潰。

  • 在C語言中,對空指標取值是一個未定義行為。許多實作對空指標取值的案例都會導致程式因為segmentation fault而當機或停止運作,因為空指標通常表示選擇了一個不是由系統分配的儲存空間,但是並非每次都會出現這種情況。
  • 在Java語言中,若嘗試從空指標的物件中取值則會觸發NullPointerException(NPE)[9],由於會觸發錯誤,因此可以使用例外處理的程式碼來捕捉,但編程上仍要儘量確保永遠不會發生此錯誤為佳。

NullPointerException

主條目:NullPointerException日语NullPointerException

空指標錯誤是一種常見的程式錯誤,當嘗試存取空指標所指向之物件時,就會發生NullPointerException[10],通常是因為物件未順利初始化或者提前解構而造成。空指標錯誤常常出現在類別設計或管理上有缺陷的程式中,一旦出現了空指標錯誤經常會導致程式當機或崩潰[11]。而在部分程式語言中,則有NullReferenceException[12](空參照錯誤),例如.Net平台。

在Java中,NullPointerException被定義在java.lang.NullPointerException日语NullPointerException,是一種執行階段錯誤(java.lang.RuntimeException)。

參見

  • 記憶體除錯英语Memory_debugger
  • 零号分页英语Zero_page

參考文獻

  1. ^ . 國家教育研究院. [2018-09-08]. (原始内容存档于2018-09-09). 
  2. ^ 2.0 2.1 Tony Hoare. Null References: The Billion Dollar Mistake. InfoQ.com. 2009-08-25 [2018-09-08]. (原始内容于2018-09-04). 
  3. ^ 3.0 3.1 Joint Technical Committee ISO/IEC JTC 1, Subcommittee SC 22, Working Group WG 14. International Standard ISO/IEC 9899 (PDF; Committee Draft). 2007-09-08 [2018-09-08]. (原始内容 (PDF)于2018-06-24). 
  4. ^ ISO/IEC 9899[3], clause 6.3.2.3, paragraph 4.
  5. ^ ISO/IEC 9899[3], clause 7.17, paragraph 3: NULL... which expands to an implementation-defined null pointer constant...
  6. ^ NULL pointer in C. [2018-09-09]. (原始内容于2018-09-09). 
  7. ^ Stroustrup, Bjarne. Chapter 5: Pointers, Arrays, and Structures: 5.1.1: Zero. The C++ Programming Language 14th printing of 3rd. United States and Canada: Addison–Wesley. March 2001: 88. ISBN 0-201-88954-4. In C, it has been popular to define a macro NULL to represent the zero pointer. Because of C++'s tighter type checking, the use of plain 0, rather than any suggested NULL macro, leads to fewer problems. If you feel you must define NULL. use
        const int NULL = 0;
    The const qualifier (§5.4) prevents accidental redefinition of NULL and ensures that NULL can be used where a constant is required.
     
  8. ^ 8.0 8.1 (PDF). stroustrup.com. 2003-09-10 [2018-09-09]. (原始内容 (PDF)存档于2017-07-05). 
  9. ^ java.lang.NullPointerException. docs.oracle.com. [2018-09-08]. (原始内容于2018-09-10). 
  10. ^ Null pointer exceptions. 曼徹斯特大學電腦科學系. [2018-09-09]. (原始内容于2018-03-25). 
  11. ^ 新版Android SDK寬容處理Kotlin程式碼可空合約違規,給開發者更新的緩衝時間. ithome.com.tw. [2018-09-08]. (原始内容于2018-09-09). 
  12. ^ System.NullReferenceException. msdn.microsoft.com. [2018-09-08]. (原始内容于2018-09-09). 

空指標, 建議将null, 特殊指標值, 併入此條目或章節, 討論, 此條目介紹的是以各種程式語言為基礎介紹null, pointer的概念, 关于c, 11語言標準的關鍵字, 请见, nullptr, 在程式語言中, 英語, null, pointer, 是一個已宣告但並未指向一個有效物件的指標, 許多程式利用來表示某些特定條件, 例如未知長度陣列的結尾或某些無法執行的操作, 在可選擇型態, optional, type, 的程式語言中, 通常可以跟可為null的型別, nullable, types, 和空值,. 建議将Null 特殊指標值 併入此條目或章節 討論 此條目介紹的是以各種程式語言為基礎介紹Null Pointer的概念 关于C 11語言標準的關鍵字 请见 nullptr 在程式語言中 空指標 1 英語 Null Pointer 是一個已宣告但並未指向一個有效物件的指標 許多程式利用空指標來表示某些特定條件 例如未知長度陣列的結尾或某些無法執行的操作 在可選擇型態 optional type 的程式語言中 空指標通常可以跟可為Null的型別 Nullable types 和空值 Nothing value 進行比較 空指標與未初始化的 英语 Uninitialized variable 指標 uninitialized pointer 不同 空指標保證不會和有值的指標相等 而未初始化的指標則是要看所使用的程式語言或編譯器而定 在部分程式語言環境下 未初始化的指標無法保證不與有值的指標相等 他可能因為存有記憶體殘值而指向了某個有效物件 目录 1 空參照 2 歷史 3 程式語言中的空指標 3 1 C語言 3 2 C 語言 4 nullptr 5 取值 5 1 NullPointerException 6 參見 7 參考文獻空參照 编辑在程式語言中 空參照 英語 Null Reference 是一個與空指標類似的概念 是一個已宣告但其並未參照到一個有效物件的變數 東尼 霍爾在1965年發明了空參照 並作為ALGOL W程式語言的一部分 2 歷史 编辑查爾斯 安東尼 理察 霍爾 C A R Hoare 在2009年表示他在1965年發明了空參照 並且將這項發明描述為 十億美元的錯誤 2 程式語言中的空指標 编辑C語言 编辑 在C語言中 任何2個空指標都保證是相等的 4 其是由預處理器的巨集提供 即NULL 其被定義為用來表示空指標的常數值 在C99是透過隱含轉換或直接轉換成void 的整數值0來使用 5 在C语言中 空指针的值表示为 define NULL void 0 6 C語言標準並沒有規定記憶體位置0與空指標相同 隨然實際上記憶體位置0與空指標在大部分的情況下會是相同的 對空指標取值在C語言中是一個未定義行為 在實作上 取值時必須確保所取的指標不為空 C 語言 编辑 在C 語言中 同樣有繼承自C語言的NULL巨集可供使用 但在傳統上會優先使用整數零來表示空指標常數 7 在C 11標準中已明確的引入一個常數 部分編譯器視之為關鍵字 如Visual Studio nullptr做為表示空指標的常數 8 nullptr 编辑主条目 nullptr nullptr是C 11語言中的關鍵字 在C 11語言標準用來表示空指標的常數值 其型態為nullptr t 8 取值 编辑因為空指標沒有指向有效的物件 所以若嘗試取值 Dereference 即 從該記憶體位置取出數值 的話 有機率導致程式執行時發生錯誤或立即崩潰 在C語言中 對空指標取值是一個未定義行為 許多實作對空指標取值的案例都會導致程式因為segmentation fault而當機或停止運作 因為空指標通常表示選擇了一個不是由系統分配的儲存空間 但是並非每次都會出現這種情況 在Java語言中 若嘗試從空指標的物件中取值則會觸發NullPointerException NPE 9 由於會觸發錯誤 因此可以使用例外處理的程式碼來捕捉 但編程上仍要儘量確保永遠不會發生此錯誤為佳 NullPointerException 编辑 主條目 NullPointerException 日语 NullPointerException 空指標錯誤是一種常見的程式錯誤 當嘗試存取空指標所指向之物件時 就會發生NullPointerException 10 通常是因為物件未順利初始化或者提前解構而造成 空指標錯誤常常出現在類別設計或管理上有缺陷的程式中 一旦出現了空指標錯誤經常會導致程式當機或崩潰 11 而在部分程式語言中 則有NullReferenceException 12 空參照錯誤 例如 Net平台 在Java中 NullPointerException被定義在java lang NullPointerException 日语 NullPointerException 是一種執行階段錯誤 java lang RuntimeException 參見 编辑記憶體除錯 英语 Memory debugger 零号分页 英语 Zero page 參考文獻 编辑 空指標 null pointer 國家教育研究院 2018 09 08 原始内容存档于2018 09 09 2 0 2 1 Tony Hoare Null References The Billion Dollar Mistake InfoQ com 2009 08 25 2018 09 08 原始内容存档于2018 09 04 3 0 3 1 Joint Technical Committee ISO IEC JTC 1 Subcommittee SC 22 Working Group WG 14 International Standard ISO IEC 9899 PDF Committee Draft 2007 09 08 2018 09 08 原始内容存档 PDF 于2018 06 24 ISO IEC 9899 3 clause 6 3 2 3 paragraph 4 ISO IEC 9899 3 clause 7 17 paragraph 3 NULL which expands to an implementation defined null pointer constant NULL pointer in C 2018 09 09 原始内容存档于2018 09 09 Stroustrup Bjarne Chapter 5 Pointers Arrays and Structures 5 1 1 Zero The C Programming Language 14th printing of 3rd United States and Canada Addison Wesley March 2001 88 ISBN 0 201 88954 4 In C it has been popular to define a macro NULL to represent the zero pointer Because of C s tighter type checking the use of plain 0 rather than any suggested NULL macro leads to fewer problems If you feel you must define NULL use const int NULL 0 The const qualifier 5 4 prevents accidental redefinition of NULL and ensures that NULL can be used where a constant is required 8 0 8 1 A name for the null pointer nullptr PDF stroustrup com 2003 09 10 2018 09 09 原始内容 PDF 存档于2017 07 05 java lang NullPointerException docs oracle com 2018 09 08 原始内容存档于2018 09 10 Null pointer exceptions 曼徹斯特大學電腦科學系 2018 09 09 原始内容存档于2018 03 25 新版Android SDK寬容處理Kotlin程式碼可空合約違規 給開發者更新的緩衝時間 ithome com tw 2018 09 08 原始内容存档于2018 09 09 System NullReferenceException msdn microsoft com 2018 09 08 原始内容存档于2018 09 09 取自 https zh wikipedia org w index php title 空指標 amp oldid 75238342 NullPointerException, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。