複製鏈接
請複製以下鏈接發送給好友

指針變量

鎖定
指針變量是指存放地址的變量。因地址的改變而做出指定性質的衡量變法
中文名
指針變量
外文名
pointer variable
解    釋
存放地址的變量
類    型
特殊的變量
存放數據
數據的地址

指針變量基本概念

存放地址的變量稱為指針變量。指針變量是一種特殊的變量,它不同於一般的變量,一般變量存放的是數據本身,而指針變量存放的是數據的地址。
舉例:int a = 68 ,系統為變量a分配的首地址為0X065FDF4H,聲明空指針long *p = NULL,p=&a是存放變量a地址的指針變量,即p=&a中存放的值為0x065FDF4H(a的值為68,&a的值為0x065FDF4H)。
對變量a的訪問有兩種方式:一是直接按地址0x065FDF4H找到a的存儲單元,從而對變量a進行訪問;二是按系統為p=&a分配的地址先找到p=&a,然後根據p,&a的值(即變量a地址0x065FDF4H)找到變量a在內存中的存儲單元,從而對變量a進行訪問。對於前一種訪問方式稱為直接訪問方式,後一種訪問方式稱為間接訪問方式。
如果一個指針變量存放的是某個對象的地址,則稱這個指針變量指向該對象。在C++程序設計中,指針變量只有確定了指向才有意義。

指針變量定義

1. 定義指針變量的一般形式如下:
類型名*指針變量名1,*指針變量名2,... *指針變量名n ;
2. 空指針
空指針是一個特殊的指針,它的值是0,C語言中用符號常量NULL(在stdio.h中定義)表示這個空值,並保證這個值不會是任何變量的地址。空指針對任何指針類型賦值都是合法的。一個指針變量具有空指針值表示當前它沒有指向任何有意義的東西。
3. void指針
(void *)類型的指針叫通用指針,可以指向任何的變量,C語言允許直接把任何變量的地址作為指針賦給通用指針。但是需要注意void*不能指向由const修飾的變量,例如const int test; void * ptv; ptv = &test;第三句是非法的,只有將ptv聲明為const void * ptv;,上述第三句ptv = &test才是合法的。
當需要使用通用指針所指的數據參加運算時,需要寫出類型強制轉換。如通用指針ptv 所指空間的數據是整型數據,p是整型指針,用此式轉換:p=(int *)ptv;

指針變量主要區別

指針是C語言的精華部分,通過利用指針,我們能很好地利用內存資源,使其發揮最大的效率。有了指針技術,我們可以描述複雜的數據結構,對字符串的處理可以更靈活,對數組的處理更方便,使程序的書寫簡潔,高效,清爽。但由於指針對初學者來説,難於理解和掌握,需要一定的計算機硬件的知識做基礎,這就需要多做多練,多上機動手,才能在實踐中儘快掌握,成為C的高手。
過去,我們在編程中定義或説明變量編譯系統就為已定義的變量分配相應的內存單元,也就是説,每個變量在內存會有固定的位置,有具體的地址。由於變量的數據類型不同,它所佔的內存單元數也不相同。若我們在程序中做定義為:
int a=1,b=2;
float x=3.4, y = 4.5 ;
double m=3.124;
char ch1='a', ch2='b';
讓我們先看一下編譯系統是怎樣為變量分配內存的。變量a,b是整型變量,在內存各佔4個字節 [1]  ;x,y是實型,各佔4個字節;m是雙精度實型,佔8個字節;ch1,ch2是字符型,各佔1個字節。由於計算機內存是按字節編址的,設變量的存放從內存2000單元開始存放,則編譯系統對變量在內存的安放情況。
圖1 圖1
變量在內存中按照數據類型的不同,佔內存的大小也不同,都有具體的內存單元地址,如變量a在內存的地址是2000,佔據兩個字節後,
變量b的內存地址就為2002,變量m的內存地址為2012等。對內存中變量的訪問,過去用scanf("%d%d%f",&a,&b,&x)表示將數據輸入變量的地址所指示的內存單元。那麼,訪問變量,首先應找到其在內存的地址,或者説,一個地址唯一指向一個內存變量,我們稱這個地址為變量的指針。如果將變量的地址保存在內存的特定區域,用變量來存放這些地址,這樣的變量就是指針變量,通過指針對所指向變量的訪問,也就是一種對變量的“間接訪問”。
設一組指針變量pa、pb、px、py、pm、pch1、pch2,分別指向上述的變量a、b、x、y、m、ch1、ch2,指針變量也同樣被存放在內存,儘管所指向的變量類型不同,但是這些指針變量所佔內存空間都是2個字節,而與所指向變量的類型無關。二者的關係如圖1所示:
在圖1中,左部所示的內存存放了指針變量的值,該值給出的是所指變量的地址,通過該地址,就可以對右部描述的變量進行訪問。如指針變量pa的值為2000,是變量a在內存的地址。因此,pa就指向變量a。變量的地址就是指針,存放指針的變量就是指針變量。
參考資料
  • 1.    許華,張靜.孫風慶主審. C++程序設計項目教程[M].北京:北京郵電大學出版社,2012:131