C語言 指標變數運算操作

2021-10-04 15:17:10 字數 1991 閱讀 1013

指標變數除了的8種基本操作,還可以使用關係運算子來比較指標。

1、賦值

注意, 位址應該和指標型別相容。也就是說, 不能把double型別的位址賦給指向int的指標, 至少要避免不明智的型別轉換。c99/c11已經強制不允許這樣做。

int a[6]

=;int b =0;

int*p1 = a;

int*p2;

/*賦值*/

p2 = a;

p2 =

&b;p2 = p1;

2、解引用

3、取址

4、指標與整數相加

指標與整數相加: 可以使用+運算子把指標與整數相加, 或整數與指標相加。無論哪種情況, 整數都會和指標所指向型別的大小(以位元組為單位)相乘, 然後把結果與初始位址相加。

int a =1;

int b[10]

=;int*p =

&b[5];

p = p + a;

p = a + p;

p = p +1;

p =1

+ p;

5、遞增指標

int a[10]

=;int*p = a;

p++;

++p;

6、指標減去乙個整數

指標減去乙個整數: 可以使用-運算子從乙個指標中減去乙個整數。指標必須是第1個運算物件, 整數是第 2 個運算物件。

該整數將乘以指標指向型別的大小(以位元組為單位) , 然後用初始位址減去乘積。

int a =1;

int b[10]

=;int*p =

&b[5];

p = p - a;

p = p -

1;

7、遞減指標

int a[10]

=;int*p =

&a[5];

p--;

--p;

8、指標求差

指標求差: 可以計算兩個指向同一型別指標的差值。 通常, 求差的兩個指標分別指向同乙個陣列的不同元素, 通過計算求出兩元素之間的距離。 差值的單位與陣列型別的單位相同。 如果指向兩個不同陣列的指標進行求差運算可能會得出乙個值, 或者導致執行時錯誤。

示例一:

#include

intmain

(int argc,

const

char

*ar**)

;int

*p1 =

&a[0];

int*p2 =

&a[5];

printf

("p1-p2 = %d\n"

, p1-p2)

;printf

("p2-p1 = %d\n"

, p2-p1)

;return0;

}執行結果為:

p1-p2 =-5

p2-p1 =

5

示例二:

#include

char a[10]

=;intmain

(int arg,

const

char

*ar**)

執行結果為:

0

9、關係運算

注意事項

1、在遞增或遞減指標時還要注意一些問題,編譯器不會檢查指標是否仍指向陣列元素。

2、在使用指標之前, 必須先用已分配的位址初始化它。

3、兩個指標變數運算時,必須是指向相同型別的指標。

4、兩個指標變數之間允許減法運算時,不允許加法、乘法、除法運算。

C語言指標變數的運算

指標變數儲存的是位址,本質上是乙個整數,可以進行部分運算,例如加法 減法 比較等,請看下面的 複製 格式化複製 include intmain else return0 include int main else return 0 執行結果 a 0x28ff44,b 0x28ff30,c 0x28f...

C語言 指標變數和整數的運算

在c 語言中,指標也能進行自加 自減運算以及與整數做加減運即讓指標變數加 減1或者加上乙個整數 減乙個整數都是合法的運算。指標運算與整數的運算並不相同,指標變數運算的時候,表示了資料的移動。float x pf x 假設變數x 的位址為4 0 0 0 h pf 5所表示的位址值為4000h 5 4 ...

C語言 指標運算

p a 將變數位址賦值給指標 p array 將陣列位址賦值給指標 p array i 將陣列元素賦值給指標 p1 p2 將指標位址賦值給指標 include 引用函式庫 void main f0889414 f0889414 f0889414 10 10 10 p 1 和 p 意義不相同,前者沒有...