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