Can you summarize the following document?
        
  在1964年,哈羅德·勞森發明了最早的指標。他在PL/I中實作出了這個概念,其他高階程式語言也很快跟進,使用了這個想法。指標(英語:pointer)這個名稱首次出現在系統發展公司(英語:System Development Corporation,SDC)的技術檔案,當中使用了堆疊指標(英語:stack pointer)這個名詞。

  在電腦科學中,指標是一種最簡單形式的參照(reference)。  指標有兩種含義,一是作為資料型別,二是作為實體。前者如字元指標、浮點指標等等;後者如指標物件、指標變數等。  指標作為資料型別,可以從一個函式型別、一個物件型別或者一個不完備型別中匯出。從中匯出的資料型別稱之為被引用型別(referenced type)。指標型別描述了一類的物件,物件值為對被引用型別的實體的引用。  C++標準中規定,“指標”概念不適用於成員指標(不包含指向靜態成員的指標)。C++標準規定,指標分為兩類:

  C99與C++11標準分別明確規定了把一個指標值轉換自(from)/成(to)整形是允許的,但整型的大小至少不低於codice_1。  在C語言的多數實現中,指標值是一個以當前系統定址範圍為取值範圍的整數。  32位系統的定址能力(地址空間)是4GB(0~2-1),以二進位制表示時長度為32位元,每格儲存空間是1 Byte。不難驗證,在32位系統的大多數實現裡,codice_2型別也正好是32-bit長度,可以取遍上述範圍。  同理,64位系統取值範圍為0~2-1,codice_2型別長度為64-bit。

  

  如果沒有指標,很難用一個統一的模式去codice_4的定位並修改一棵樹的結點。例如:不用指標要修改codice_4的左子樹的左子樹的右子結點,只有“codice_6”一種表達方式,不能通過賦值而簡化。

  C中函式呼叫是按值傳遞的,傳入引數在子函式中只是一個初值相等的副本,無法對傳入引數作任何改動。但實際程式設計中,經常要改動傳入引數的值。在C語言中一般通過傳入引數的地址而不是原引數本身來實現。當對傳入引數(地址)取“codice_7”運算時,就可以直接在記憶體中修改,從而改動原想作為傳入引數的引數值。  在執行codice_8;時,操作codice_9,即是在操作codice_10了。  以下例子中,codice_11內的變數從來沒有改變,改變的只是codice_12內的變數。 codice_12執行完畢後,其內容會自動刪除。

  

  取值運算(codice_14)返回儲存在記憶體地址為codice_15的記憶體空間中的值。取地址(codice_16)運算則返回運算元codice_15的記憶體地址。顯然可以用賦值語句對記憶體地址賦值。  假設一段記憶體地址空間取值如下:(十六進位制)  然後,執行程式碼“codice_18”,假設初始化時codice_15被分配3001H、3002H兩個地址。則codice_15為2003H,codice_14為3000H。  則codice_22、codice_23、codice_24和codice_25的值分別為:  codice_260020H。  codice_27,出錯,3001H是常數,無地址可言。  codice_28=2003H,也即codice_29。  codice_30,出錯,3000H是常數,無地址可言。

  

  雙重指標是指向指標的指標,它是一個指標,這個指標指向某個記憶體地址,該地址的值是一個指標,指向給另一個記憶體地址(通常異於前者,但不排除二者相等)。  本質上,指標值就是記憶體地址。但為了防範指標值被濫用(如記憶體訪問時越界),可以規定指標型別為強型別,即指標值及儲存在該記憶體地址的物件的型別。雙重指標不過是這種強型別的一個應用:該地址空間長度為一個指標長度(4或8位元組),物件型別為另一種指標。

  指標陣列:就是一個陣列,陣列的各個元素都是指標值。

  陣列名出現在表示式中時,絕大多數情況(除了陣列名作為sizeof的運算元或者作為取地址&元素符的運算元)會被隱式轉換為指向陣列的首個元素的指標右值。  當陣列名作為取地址&運算子的運算元,則表示式的值為指向整個陣列的指標右值。  例子:  根據上述C語言標準中的規定,表示式 &s 的值的型別是char (*)[6],即指向整個陣列的指標;而表示式 s 則被隱式轉換為指向陣列首元素的指標值,即 char* 型別。同理,表示式 s[4],等效於表示式 *(s+4)。

  指向函式的指標:不同於指向資料型別的指標,函式指標指向一段可執行的程式碼的首地址,這段程式碼仍然佔用了一塊記憶體空間。,因為它最多隻有結構體的定義,而沒有類的概念。根據本段所述,可以認為C語言能成為物件導向的語言,只是表述比較麻煩而已。事實上很多開源程式都使用這種方式組織他們的程式碼。

  由於指標太活躍,因此導致它幾乎能不受限制的在各種記憶體位址間活動,所以一旦有任何重複、重疊、溢位的情形發生時,電腦便直接當機,這成為指標功能上的最大缺憾。因此在新的網路程式語言的開發上,新的語言如Java、C#等語種已經取消了指標的無限制使用形式。 C#允許指標的有限功能的使用,指標和運算指標在一個操作的環境中是存在潛在的非安全性的,因為他們的使用可以避開物件的一些嚴格訪問規則。C#中使用指標的程式碼段或者方法的地址要用unsafe關鍵字進行標記,這樣,這些程式碼的使用者就會知道這個程式碼相比其他的程式碼而言是不具有安全性的。編譯器需要unsafe關鍵字時將使用此程式碼的程式轉換成是允許被編譯的。一般來說,不安全程式碼的使用可能是為了非託管的API(應用程式程式設計介面)的更好互用,或者是為了(存在內在不安全性的)系統呼叫,也有可能是出於提高效能等方面的原因。而Java中不允許指標或者算術指標的使用。
在電腦科學中,指標(英語:Pointer),是程式語言中的一類資料型別及其物件或變數,用來表示或儲存一個記憶體位址,這個位址的值直接指向(英語:points to)存在該地址的物件的值。