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