指標變數除了的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 意義不相同,前者沒有...