C語(yǔ)言 指針運(yùn)算符與取地址運(yùn)算符
與指針相關(guān)的運(yùn)算符有兩個(gè):
(1)取地址運(yùn)算符“&”:該運(yùn)算符的功能是取出一個(gè)變量的地址。例如,使用scanf()函數(shù)輸入變量的值:
scanf ("%d",&x);
(2)指針運(yùn)算符:也可以叫做間址運(yùn)算符或指向運(yùn)算符。使用形式為:
*指針變量
例如:
main()
{
int a=10;
int *p;
p=&a;
printf("%d",a);
printf("%d",*p);
主函數(shù)的第一條語(yǔ)句和第二條語(yǔ)句,分別定義了一個(gè)普通變量a和一個(gè)指針變量p。而第三條語(yǔ)句p=&a,將指針p指向變量a,也就是將a的地址存儲(chǔ)在指針p中。一旦指針p與變量a有了指向關(guān)系,就可以用來(lái)引用變量a的值,所以主函數(shù)的最后一句出現(xiàn)的*p就代表了變量a的值。
如果在程序中想對(duì)變量a用scanf()函數(shù)輸入數(shù)據(jù),可以使用:
scanf("%d",&x);
假設(shè)變量a與指針p有了指向關(guān)系p=&a,scanf()函數(shù)也可以寫成如下形式:
scanf("%d",p);
因?yàn)镻本身就代表了變量a的地址,所以可以將鍵盤輸入的值送入到a的地址中。但注意不要寫成如 下形式:
scanf("%d",&p);
這種寫法意味著想輸入一個(gè)值送到指針p的地址中,而不是指針p所指向的變量的地址中,所以用法是錯(cuò)誤的。
如果理解了指針運(yùn)算符的含義,假設(shè)有定義:
int a=5, *p;
*p=&a;
則表達(dá)式a、*p、*&a是等價(jià)的。其中表達(dá)式“*&a”的含義是,先取變量a的地址,再用指針運(yùn)算符“*”取出該地址中存放的值,其實(shí)質(zhì)還是“a”。
而表達(dá)式&a、p、&*p是等價(jià)的。對(duì)于表達(dá)式的操作順序?yàn)?,先?jì)算*p,*p其實(shí)就是a, 之后再取地址。所以本質(zhì)和&a是一樣的。
點(diǎn)擊加載更多評(píng)論>>