6.2.1 指針變量的定義 在C程序中,存放地址的指針變量需專門定義; int *ptr1; float *ptr2; char *ptr3; 表示定義了三個指針變量ptr1、ptr2、ptr3。ptr1可以指向一個整型變量, ptr2可以指向一個實型變量,ptr3可以指向一個字符型變量,換句話說, ptr1、ptr2、ptr3可以分別存放整型變量的地址、實型變量的地址、字符型變量的地址。 定義了指針變量,我們才可以寫入指向某種數據類型的變量的地址,或者說是為指針變量賦初值: int *ptr1,m= 3; float *ptr2, f=4.5; char *ptr3, ch='a'; ptr1 = & m ; ptr2 = & f ; ptr3 = & c h ; 上述賦值語句ptr1 = & m表示將變量m的地址賦給指針變量ptr1,此時ptr1就指向m。三條賦值語句產生的效果是ptr1指向m;ptr2指向f;ptr3指向ch 。用示意圖6 - 3描述如下: 需要說明的是,指針變量可以指向任何類型的變量,當定義指針變量時,指針變量的值是隨機的,不能確定它具體的指向,必須為其賦值,才有意義。 6.2.2 指針變量的引用 利用指針變量,是提供對變量的一種間接訪問形式。對指針變量的引用形式為: *指針變量 其含義是指針變量所指向的值。 [例6-1] 用指針變量進行輸入、輸出。 m a i n ( ) { int *p,m; s c a n f ( " % d " , & m ) ; p = & m ; / *指針p指向變量m * / /* p是對指針所指的變量的引用形式,與此m意義相同* / } 運行程序: R U N ¿ 3¿ 3 上述程序可修改為: m a i n ( ) { int *p,m; p = & m ; s c a n f ( " % d " , p ) ; /* p是變量m的地址,可以替換& m * / printf("%d", m); } 運行效果完全相同。請思考一下若將程序修改為如下形式: m a i n ( ) { int *p,m; s c a n f ( " % d " , p ) ; p = & m ; printf("%d", m); } 會產生什么樣的結果呢?事實上,若定義了變量以及指向該變量的指針為: int a,*p; 若p=&a; 則稱p指向變量a,或者說p具有了變量a的地址。在以后的程序處理中,凡是可以寫& a的地方,就可以替換成指針的表示p,a就可以替換成為* p。