C語(yǔ)言程序設(shè)計(jì)(第6章指針)2

字號(hào):

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。