5 1 指標與位址 C

2022-01-23 02:34:21 字數 1382 閱讀 6028

一元運算子*是間接定址或間接引用運算子。當它作用與指標時,將訪問指標所指向的物件。我們在這裡假定 x 與 y 是整數,而 ip 是指向 int 型別的指標,下面的**說明了如何在程式中宣告指標以及如何使用運算子&和*:

intx =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

51指標定義

c51指標型別和儲存區的關係詳解 轉貼 一 儲存型別與儲存區關係 data 可定址片內ram bdata 可位定址的片內ram idata 可定址片內ram,允許訪問全部內部ram pdata 分頁定址片外ram movx r0 256 byte 頁 xdata 可定址片外ram 64k 位址範圍 ...

C語言(九) 指標(3)指標與const

表示一旦得到了某個變數的位址,不能再指向其他變數 int i 0 int const q i q是 const q 20 ok q error表示不能通過指標去修改這個變數 int i 0 int j const int p i const int p 等同於 int const p p 20 er...

指標學習二 指標 位址

通過位址的呼叫來改變變數的值 includevoid f int p void g int k int main void f int p void g int k i 0063fe9c p 0063fe9c p 6 k 26定義乙個變數p,它位於2000單元,該單元存放了變數x的位址1000。此時...