6.2 指針變量的定義與引用
6.2.1 指針變量的定義
在C程序中,存放地址的指針變量需專(zhuān)門(mén)定義;
int *ptr1;
float *ptr2;
char *ptr3;
表示定義了三個(gè)指針變量ptr1、ptr2、ptr3。ptr1可以指向一個(gè)整型變量, ptr2可以指向一個(gè)實(shí)型變量,ptr3可以指向一個(gè)字符型變量,換句話說(shuō), ptr1、ptr2、ptr3可以分別存放整型變量的地址、實(shí)型變量的地址、字符型變量的地址。
定義了指針變量,我們才可以寫(xiě)入指向某種數(shù)據(jù)類(lèi)型的變量的地址,或者說(shuō)是為指針變量賦初值:
int *ptr1,m= 3;
float *ptr2, f=4.5;
char *ptr3, ch='a';
ptr1 = &m ;
ptr2 = &f ;
ptr3 = &ch ;
上述賦值語(yǔ)句ptr1 = &m表示將變量m的地址賦給指針變量ptr1,此時(shí)ptr1就指向m。三條賦值語(yǔ)句產(chǎn)生的效果是ptr1指向m;ptr2指向f;ptr3指向ch 。用示意圖6 - 3描述如下:
需要說(shuō)明的是,指針變量可以指向任何類(lèi)型的變量,當(dāng)定義指針變量時(shí),指針變量的值是隨機(jī)的,不能確定它具體的指向,必須為其賦值,才有意義。
6.2.2 指針變量的引用
利用指針變量,是提供對(duì)變量的一種間接訪問(wèn)形式。對(duì)指針變量的引用形式為:
*指針變量
其含義是指針變量所指向的值。
[例6-1] 用指針變量進(jìn)行輸入、輸出。
main( )
{
int *p,m;
scanf("%d" , &m);
p = &m ; / *指針p指向變量m * /
printf("%d",*p);
/* p是對(duì)指針?biāo)傅淖兞康囊眯问?與此m意義相同* /
}
運(yùn)行程序:
3
3
上述程序可修改為:
main( )
{
int *p,m;
p = &m ;
scanf("%d" , p); /* p是變量m的地址,可以替換& m * /
printf("%d", m);
}
運(yùn)行效果完全相同。請(qǐng)思考一下若將程序修改為如下形式:
main( )
{
int *p,m;
scanf("%d" , p);
p = &m ;
printf("%d", m);
}
會(huì)產(chǎn)生什么樣的結(jié)果呢?事實(shí)上,若定義了變量以及指向該變量的指針為:
int a,*p;
若p=&a; 則稱(chēng)p指向變量a,或者說(shuō)p具有了變量a的地址。在以后的程序處理中,凡是可
以寫(xiě)&a的地方,就可以替換成指針的表示p,a就可以替換成為*p。
6.2.1 指針變量的定義
在C程序中,存放地址的指針變量需專(zhuān)門(mén)定義;
int *ptr1;
float *ptr2;
char *ptr3;
表示定義了三個(gè)指針變量ptr1、ptr2、ptr3。ptr1可以指向一個(gè)整型變量, ptr2可以指向一個(gè)實(shí)型變量,ptr3可以指向一個(gè)字符型變量,換句話說(shuō), ptr1、ptr2、ptr3可以分別存放整型變量的地址、實(shí)型變量的地址、字符型變量的地址。
定義了指針變量,我們才可以寫(xiě)入指向某種數(shù)據(jù)類(lèi)型的變量的地址,或者說(shuō)是為指針變量賦初值:
int *ptr1,m= 3;
float *ptr2, f=4.5;
char *ptr3, ch='a';
ptr1 = &m ;
ptr2 = &f ;
ptr3 = &ch ;
上述賦值語(yǔ)句ptr1 = &m表示將變量m的地址賦給指針變量ptr1,此時(shí)ptr1就指向m。三條賦值語(yǔ)句產(chǎn)生的效果是ptr1指向m;ptr2指向f;ptr3指向ch 。用示意圖6 - 3描述如下:
需要說(shuō)明的是,指針變量可以指向任何類(lèi)型的變量,當(dāng)定義指針變量時(shí),指針變量的值是隨機(jī)的,不能確定它具體的指向,必須為其賦值,才有意義。
6.2.2 指針變量的引用
利用指針變量,是提供對(duì)變量的一種間接訪問(wèn)形式。對(duì)指針變量的引用形式為:
*指針變量
其含義是指針變量所指向的值。
[例6-1] 用指針變量進(jìn)行輸入、輸出。
main( )
{
int *p,m;
scanf("%d" , &m);
p = &m ; / *指針p指向變量m * /
printf("%d",*p);
/* p是對(duì)指針?biāo)傅淖兞康囊眯问?與此m意義相同* /
}
運(yùn)行程序:
3
3
上述程序可修改為:
main( )
{
int *p,m;
p = &m ;
scanf("%d" , p); /* p是變量m的地址,可以替換& m * /
printf("%d", m);
}
運(yùn)行效果完全相同。請(qǐng)思考一下若將程序修改為如下形式:
main( )
{
int *p,m;
scanf("%d" , p);
p = &m ;
printf("%d", m);
}
會(huì)產(chǎn)生什么樣的結(jié)果呢?事實(shí)上,若定義了變量以及指向該變量的指針為:
int a,*p;
若p=&a; 則稱(chēng)p指向變量a,或者說(shuō)p具有了變量a的地址。在以后的程序處理中,凡是可
以寫(xiě)&a的地方,就可以替換成指針的表示p,a就可以替換成為*p。