5.1 指针与地址 (C)
指針與地址
——《C程序設計語言(第2版-新版)》5.1
?
?? 一元運算符&可用于取一個對象的地址,因此,下列語句:
?p = &c;
將把 c 的地址賦值給變了p,我們稱 p 為“指向”c的指針。地址運算符&只能應用于內存中的對象,即變量與數組元素。它不能作用于表達式、常量或 register 類型的變量。
?
?? 一元運算符*是間接尋址或間接引用運算符。當它作用與指針時,將訪問指針所指向的對象。我們在這里假定 x 與 y 是整數,而 ip 是指向 int 類型的指針,下面的代碼說明了如何在程序中聲明指針以及如何使用運算符&和*:
int?x?=?1,?y?=?2,?z[10];
int?*ip;???/*?ip?is?a?pointer?to?int?*/
ip?=?&x;???/*?ip?now?points?to?x?*/
y?=?*ip;???/*?y?is?now?1?*/
*ip?=?0;???/*?x?is?now?0?*/
ip?=?&z[0]?/*?ip?now?points?to?z[0]?*/
?
??我們來看指針 ip 的聲明,如下所示:
??int *ip;
這樣聲明是為了便于記憶。該聲明語句表明表達式*ip的結果是int類型。這種聲明變量的語法與聲明該變量所在的表達式的語法類似。同樣的原因,對函數的聲明也可以采用這種方式。例如,聲明:
??double *dp, atof(char *);
表明,在表達式中,*dp和atof(s)的值都是double類型,且atof的參數是一個指向char類型的參數。?
?
??我們應該注意,指針只能指向某種特定類型的對象,也就是說,每個指針都必須指向某種特定的數據類型。(一個例外情況是指向void類型的指針可以存放指向任何類型的指針,但它不能間接引用其自身。)。
?
??如果指針 ip 指向整形變量,那么在 x 可以出現的任何上下文中都可以使用 *ip,因此,語句
??*ip = *ip + 10;
將把*ip的值增加10。
?
??一元運算符*和&的優先級比算術運算符的優先級高,因此,賦值語句
??y = *ip + 1;
將把*ip指向的對象的值取出并加1,然后再將結果賦值給y,而下列賦值語句:
??*ip += 1;
則將 ip 指向的對象的值加1,它等同于
??++*ip; ?
或
??(*ip)++;
語句的執行結果。 語句(*ip)++中的圓括號是必須的,否則,該表達式將對 ip 進行加1運算,而不是對 ip 指向的對象進行加1運算,這是因為,類似于*和++這樣的一元運算符遵循從右至左的結合順序。
?
??最后說明一點,由于指針也是變量,所以在程序中可以直接使用,而不必通過間接引用的方法使用。例如,如果 iq 是另一個指向整形的指針,那么語句
??iq = ip;
將把 ip 中的值拷貝到 iq 中,這樣,指針 iq 也將指向 ip 指向的對象。?
?
/*********************************
?* Last Edit By Old At 2009.12.26
?********************************/?
C程序設計語言_第2版新版.pdf??
總結
以上是生活随笔為你收集整理的5.1 指针与地址 (C)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LPCTSTR类型
- 下一篇: 填写各类表格时有时在多个选择前有小方框