讀古今文學網 > C語言解惑 > 2.10 引入指針更方便 >

2.10 引入指針更方便

如果引入一個新類型的變量(例如p),使p等於變量的地址,*p代表變量的值,即對於上面的例子,只要使「p=&a」就使p存儲了變量a的地址&a,而「*p」就是a的值,這就大大簡化了表達式。通過聲明一個指針變量,就可以實現這種操作。


int a=25
;
int *p
;
p=&a
;
  

雖然p是指針變量,但這個變量與基本變量不一樣。基本變量與基本數據類型相對應,如int變量存儲整型值,char變量存儲字符值,等等。但指針變量p存儲的是地址值,所以


printf
("%p\n"
,p
);
  

語句輸出的是存儲變量x的地址,它和語句


printf
("%d"
,&x
);
  

是等效的,都是輸出十六進制地址值「0012FF7C」(其實,這個值取決於機器)。而且不管是何種類型的指針,編譯器都給它分配4個字節。

既然p具體存放的地址是內存裡存放變量a的地址,*p就是這個地址所保存的值,也就是變量a的值。所以語句


printf
("%d"
,a
);
  

輸出變量a的值25,它的等效語句是


printf
("%d\n"
,*p
);
  

下面是一個完整的演示程序。對比它們的輸出,就會明白其中的奧妙。

【例2.16】演示輸出指針的例子。


#include <stdio.h>
void main 
( 
)
{   
        int a=25
,*p
;
        p=&a
; 
        printf
("%d
,0x%p\n"
, a
, &a
);
        printf
("%d
,0x%p\n"
, *p
, p
);
}
  

使用「0x」標識地址是十六進制,程序輸出如下。


25
,0x0012FF7C
25
,0x0012FF7C