指針實(shí)際是一個(gè)整數(shù)數(shù)值,這個(gè)數(shù)字代表操作系統(tǒng)分配的內(nèi)存的一個(gè)位置(通常成為“地址”)。
舉個(gè)排隊(duì)的例子,比如一個(gè)門口有很多人依次排隊(duì),我們可以從排隊(duì)的第一個(gè)人開始,依次給每個(gè)人一個(gè)唯一的號(hào)碼,我們通過號(hào)碼,就能快速找到對應(yīng)的排隊(duì)的人。
相似的,當(dāng)我們通過指針得到內(nèi)存地址后,再通過指針類型(char、int、long等),可以提取從這個(gè)內(nèi)存位置開始的指定bit的二進(jìn)制數(shù)據(jù),這個(gè)數(shù)據(jù)可以被程序執(zhí)行來使用。
使用指針的好處是“快速”和“靈活”,早期電腦計(jì)算能力比較弱,指針操作相對速度要更快,但在今天的電腦運(yùn)行速度情況下,快速的優(yōu)勢已經(jīng)不再明顯。
但從靈活性方面,指針是c語言最有特色的功能之一,無論從字符串的處理,函數(shù)的調(diào)用和的返回等都非常靈活,也簡化了程序開發(fā)。
不過靈活也帶來了管理的難度,指針操作如果不注意的話,非常容易造成內(nèi)存溢出等錯(cuò)誤導(dǎo)致程序崩潰(比如,對一個(gè)包含5個(gè)字符的字符串,如果程序試圖從指針地址加5獲取第六個(gè)字符),也因?yàn)槿绱耍琧語言的子孫或后繼們,除了c++和go支持指針,c#采用了非安全代碼的折中方案外,如java,pyrhon等,大多都不再提供指針的功能,但也限制語言的能力。