指針

指針

在電腦科學中,指針(Pointer)是程式語言中的一個對象,利用地址,它的值直接指向(points to)存在電腦存儲器中另一個地方的值。由于通過地址能找到所需的變數單元,可以說,地址指向該變數單元。因此,將地址形象化的稱為"指針"。意思是通過它能找到以它為地址的記憶體單元。 在高級語言中,指針有效地取代了在低級語言,如匯編語言與機器碼,直接使用通用暫存器的地方,但它可能隻適用于合法地址之中。指針參考了存儲器中某個地址,通過被稱為反參考指針的動作,可以取出在那個地址中存儲的值。作個比喻,假設將電腦存儲器當成一本書,一張內容記錄了某個頁碼加上行號的便利貼,可以被當成是一個指向特定頁面的指針;根據便利貼上面的頁碼與行號,翻到那個頁面,把那個頁面的那一行文字讀出來,就相當于是對這個指針進行反參考的動作。

在信息工程中指針是一個用來指示一個記憶體地址的電腦語言的變數或中央處理器(CPU)中暫存器(Register)【用來指向該記憶體地址所對應的變數或數組】。指針一般出現在比較接近機器語言的語言,如匯編語言或C語言。面向對象的語言如Java一般避免用指針。指針一般指向一個函式或一個變數。在使用一個指針時,一個程式既可以直接使用這個指針所儲存的記憶體地址,又可以使用這個地址裏儲存的函式的值。

另外,指針也指鍾表中用來指示對應時間的部件。

  • 中文名稱
    指針
  • 外文名稱
    indicator

基本介紹

在日常生活中指針是儀器或鍾表上的,用來指示測量的資料的裝置。在信息工程中指針是一個用來指示一個記憶體地址的電腦語言變數中央處理器(CPU)中暫存器

指針介紹

指針

在信息工程中指針是一個用來指示一個記憶體地址的電腦語言的變數或中央處理器(CPU)中暫存器(Register)。指針一般出現在比較近機器語言的語言,如匯編語言或C語言。面向對象的語言如Java一般避免用指針。指針一般指向一個函式或一個變數。在使用一個指針時,一個程式既可以直接使用這個指針所儲存的記憶體地址,又可以使用這個地址裏儲存的變數或函式的值。

指針與C語言

大家都認為,c語言之所以強大,以及其自由性,很大部分體現在其靈活的指針運用上。因此,說指針是c語言的靈魂,一點都不為過。同時,這種說法也讓很多人產生誤解,似乎隻有C語言的指針才能算指針。basic不支持指針,在此不論。其實,pascal語言本身也是支持指針的。從最初的pascal發展至今的object pascal,可以說在指針運用上,絲毫不會遜色于c語言的指針。

記憶體分配表

電腦中的記憶體都是編址的,就像你家的地址一樣。在程式編譯或者運行的時候,系統(可以不關心具體是什麽,可能是編譯器,也可能是作業系統)開闢了一張表。每遇到一次聲明語句(包括函式的傳入參數的聲明)都會開闢一個記憶體空間,並在表中增加一行紀錄。記載著一些對應關系。(如圖1所示)

----------------------------------------------------

指針

Declaration | ID Name Address Length

----------------------------------------------------

int nP; | 1 nP 2000 2B

char myChar; | 2 myChar 2002 1B

int *myPointer; | 3 myPointer 2003 2B

char *myPointer2; | 4 myPointer2 2005 2B

----------------------------------------------------

是一個整數

指針,是一個無符號整數(unsigned int),它是一個以當前系統定址範圍為取值範圍的整數。32位系統下定址能力(地址空間)是4G-byte(0~2^32-1)二進位表示長度為32bit(也就是4B)。

int類型也正好如此取值。

例證

例證就是程式1得到的答案和程式2的答案一致。(不同機器可能需要調整一下pT的取值。)

----------------------------------------------------

程式

#include <stdio.h>

main()

{

char *pT;

char t='h';

pT=&t;

putchar(*pT);

}

----------------------------------------------------

程式

#include <stdio.h>

main()

{

char *pT;

char t='h';

pT=(char *)1245048;

putchar(*pT);

}

----------------------------------------------------

加上(char *)是因為畢竟int 和char *不是一回事,需要強製轉換,否則會有個警告。因為char *聲明過的類型,一次訪問1個sizeof(char)長度,double *聲明過的類型,一次訪問1個sizeof(double)長度。

在匯編裏int 類型和指針就是一回事了。因為不論是整數還是指針,執行自增的時候,都是其值加一。如果上文聲明char *pT;,匯編語言中pT自增之後值為1245049,可是C語言中pT++之後pT值為1245049。如果32 位系統中, s 上文聲明int *pT;,匯編語言中pT 自增之後值為1245049,可是C 語言中pT++之後pT值為1245052。

為什麽DOS下面的Turbo C,和Windows下VC的int類型不一樣長。因為DOS是16位的,Windows是32位的,可以預見,在64位Windows 中編譯,上文聲明int *pT;,pT++之後pT值為1245056。

例證

那麽,復雜的結構怎麽分配空間呢?C語言的結構體(匯編語言對應為Record類型)按順序分配空間。(如圖2所示)

----------------------------------------------------

指針

int a[20];

----------------------------------------------------

typedef struct st

{

double val;

char c;

struct st *next;

} pst;

----------------------------------------------------

pst pT[10];

----------------------------------------------------

在32 位系統下,記憶體裏面做如下分配(單位:H,16 進位);(如圖3所示)

----------------------------------------------------

指針

變數 2000 2001 2002 2003 2004 2005 2006 … 204C 204D 204E 204F

地址 a[0] a[1] … a[19]

----------------------------------------------------

變數 2050 2051 … 2057 2058 2059 205A 205B 205C 205D 205E 205F

地址 pst.val pst.c pst.next 無效 無效 無效

----------------------------------------------------

這就說明了為什麽sizeof(pst)=16而不是8。編譯器把結構體的大小規定為結構體成員中大小最大的那個類型的整數倍。

至于pT的存儲,可以依例推得。總長為160,此不贅述。

有個問題,如果執行pT++,答案是什麽?是自增16,還是160?別忘了,pT 是常量,不能加減。

所以,我們就可以聲明:

----------------------------------------------------

typedef struct BinTree

{

int value;

struct BinTree *LeftChild;

struct BinTree *RightChild;

} BTree;

----------------------------------------------------

用一個整數,代表一棵樹的結點。把它賦給某個結點的LeftChild/RightChild 值,就形成了上下級關系。隻要無法找到一個路徑,使得A->LC/RC->LC/RC...->LC/RC==A,這就構成了一棵二叉樹。反之就成了圖。

指針的作用

指針可以用來有效地表示復雜的資料結構,可以用于函式參數傳遞並達到更加靈活使用函式的目的.使C語言程式的設計具有靈活、實用、高效的特點。

指針不僅僅是C語言的靈魂,運用得好更是事半功倍,讓你寫出的程式更簡潔!

指針網

一個專門用于圖書搜尋的網站,指針圖書網。自稱全球最大中文圖書檢索網站。

鍾表的指針

在日常生活中指針是儀器或鍾表上的,可動的,一般狹長的,往往在一段尖的用來指示測量的資料的裝置。

指針法

指針是以手指按壓或爪切某些穴位,代替針刺治病的一種治療方法,具有疏通經絡、行氣活血、調和髒腑功能、開竅醒神、止痛等作用。常用于突發性病症,如虛脫、中暑、癔病及多種痛症。亦可用于一些內傷外感雜病的治療。

操作方法

指針的基本手法可分為揉、捫、切、捏、點5種。

揉法:是用手指的尖端,輕按選下的穴位,作環形平揉的一種方法。揉動時手指的尖端不能離開所接觸的皮膚,手指連同皮膚及皮下組織,以穴位為中心,作一小圓形轉動,不要使手指與皮膚呈摩擦狀態。每次揉一小圓周為1次,每穴位一般以120~180次為標準,約2~3分鍾。次數的多少亦可視病情的輕重而定。常用拇拽和中指作揉法。本法在指針中套用較廣。施術時需要根據病人質強弱和病情輕重施以輕重不同的指力。本法可與捫法配合套用。

捫法:是用手指捫按腧穴或身體一定部位的手法。將手指端深深按壓皮膚及皮下組織深部,同時根據病人體質強弱,施以輕重不同的指力,以感到酸麻脹痛為止。當指端按入時,應逐漸減輕指力,最後停止。每穴一般捫按3分鍾左右。捫法又分為單指法和雙指法2種。

(1)單指法:一般用拇指或中指指端按壓在穴位上。此法常用于胸腹部和四肢部的穴位,如氣海CV (RN)6 ,中脘CV (RN)12,曲池LI11 、足三裏ST36等(見圖)

(2)雙指法:即兩手指同時捫按兩個穴位。此法常用于頭面、頸項、腹部、背腹部的穴位,如風池GB20 、陽白GB14 、天樞ST25 等穴位。(見圖)

切法:用拇指指甲切按腧穴。操作時可用脫脂棉少許,覆于指甲 ,防止切傷皮膚。指切時用力需要輕而緩慢,特別是壓痛處更應註意,盡量避免切處劇烈疼痛。本法多用于狹窄部位的穴位,如人中GV (DU)26 、迎香LI20 、少商LU11 等(見圖)。

捏法:是用兩個手指對稱捏壓穴位的手法,可用拇、食二指,也可用拇、中二指或拇指與其它各指,在上下方或左右方對稱相向用力。可捏壓一個或兩個穴位上。如果捏壓一個穴位,拇指在這個穴位上,另一指或其它各指則在對稱地方,此法常用于四肢、肩頸部等部位的穴位,如合谷LI4 、曲池LI11 、足三裏ST36 、三陰交SP6 等(見圖)。

點法:是一指或二、三指點在痛點或穴位上,先輕後重。逐漸深透。本法常用于肩部、背部、臀部和大腿等部位的穴位。

適用範圍

由于指針療法不需要任何操作器械及穴位消毒,可以隨時隨地套用,因此可套用于多種急症的處理,如暈厥、劇烈疼痛等。又因指針療法具有疼痛小的特點,因此廣泛適用于年老體弱、兒童、懼怕針刺者及孕婦等。也可作為患者自我治療及預防疾病的一種方法。

註意事項

(1)施術者註意手的消毒,以免交叉感染;指甲宜常剪,以免切傷病人皮膚。

(2)指力的輕重以病人能耐受為宜。以免病人產生不適或暈針;對年老體弱者和兒童,施術時指力不可過重。

(3)指針的施術時間以1~3分鍾為標準,亦可根據病情增減。

(4)急性傳染病、皮膚病、腫瘤以及腹痛拒按的患者,不宜使用指針。

(5)小兒頭部的囟門區和孕婦的合谷LI4 、三陰交SP6 以及腹部穴位等,不宜用指針。

(6)過飢、過飽、酒醉、勞累過度時,不宜用指針。    

相關詞條

相關搜尋

其它詞條