程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 指針運算符與指針表達式

指針運算符與指針表達式

編輯:C語言基礎知識

6.3.1指針運算符與指針表達式

在C中有兩個關於指針的運算符:

•&運算符:取地址運算符,&m即是變量m的地址。

•*運算符:指針運算符,*ptr表示其所指向的變量。

[例6-2]從鍵盤輸入兩個整數,按由大到小的順序輸出。

main()
{
int *p1,*p2,a,b,t;/*定義指針變量與整型變量*/
scanf("%d,%d",&a,&b);
p1=&a;/*使指針變量指向整型變量*/
p2=&b;
if(*p1<*p2)
{/*交換指針變量指向的整型變量*/
t=*p1;
*p1=*p2;
*p2=t;
}
printf("%d,%d\n",a,b);
}

在程序中,當執行賦值操作p1=&a和p2=&b後,指針實實在在地指向了變量a與b,這時引用指針*p1與*p2,就代表了變量a與b。運行程序:

RUN
3,4
4,3

在程序運行過程中,指針與所指的變量之間的關系如圖6-4所示:

 

當指針被賦值後,其在內存的安放如a),當數據比較後進行交換,這時,指針變量與所指向的變量的關系如b)所示,在程序的運行過程中,指針變量與所指向的變量其指向始終沒變。下面對程序做修改。

[例6-3]

main()
{
int*p1,*p2,a,b,*t;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
if(*p1<*p2)
{/*指針交換指向*/
t=p1;
p1=p2;
p2=t;
}
printf("%d,%d\n",*p1,*p2);
}

程序的運行結果完全相同,但程序在運行過程中,實際存放在內存中的數據沒有移動,而是將指向該變量的指針交換了指向。其示意如圖6-5:

 

當指針交換指向後,p1和p2由原來指向的變量a和b改變為指向變量b和a,這樣一來,*p1就表示變量b,而*p2就表示變量a。在上述程序中,無論在何時,只要指針與所指向的變量滿足p=&a;我們就可以對變量a以指針的形式來表示。此時p等效於&a,*p等效於變量a。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved