指標運算子與指標運算式

來源:互聯網
上載者:User

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。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。