指針運算
指針的算術運算:
運算符 | 計算形式 | 意義 |
---|---|---|
+ | px+n | 指針向地址大的方向移動n個數據 |
- | px-n | 指針向地址小的方向移動n個數據 |
++ | px++ | 指針向地址大的方向移動1個數據 |
– | px– | 指針向地址小的方向移動1個數據 |
- | px-py | 兩個指針之間相隔數據元素的個數 |
注意:
不同數據類型的兩個指針實際加減整數運算是無意義的
px+n表示的實際位置的地址量是:
(px) + sizeof(px的類型) *n
px-n表示的實際位置的地址量是:
(px) - sizeof(px的類型) *n
兩指針相減運算
px-py運算的結果是兩指針指向的地址位置之間相隔數據的個數,因此兩指針相減不是兩指針持有地址值相減的結果。
s兩指針相減的結果值不是地址量,而是一個整數值,表示兩指針之間相隔數據的個數。
指針的關係運算
運算符 | 說明 | 例子 |
---|---|---|
> | 大於 | px > py |
< | 小於 | px < py |
>= | 大於等於 | px >= py |
<= | 小於等於 | px <= py |
!= | 不等於 | px != py |
== | 等於 | px == py |
兩指針之間的關係運算表示它們指向的地址位置之間的關係。指向地址大的指針大於指向地址小的指針。
指針與一般整數變量之間的關係運算沒有意義。但可以和零進行等於或不等於的關係運算,判斷指針是否爲空。
指針與數組
在C語言中,數組的指針是指數組在內存中的起始地址,數組元素的地址是指數組元素在內存中的起始地址
一維數組的數組名爲一維數組的指針(起始地址)
設置指針變量px的地址值等於數組指針x(即指針變量px指向數組的首元素)
注意:
指針變量和數組在訪問數組中元素時,一定條件下其使用方法具有相同的形式,因爲指針變量和數組名都是地址量;但指針變量和數組的指針(或叫數組名)在本質上不同,指針變量是地址
變量,而數組的指針是地址常量。
指針與二維數組
多維數組就是具有兩個或兩個以上下標的數組,在C語言中,二維數組的元素連續存儲,按行優先存
可以把我二維數組看作由多個一維數組組成
二維數組名代表數組的起始地址,數組名加1,是移動一行元素。因此,二維數組名常被稱爲行地址。
行指針(數組指針)
存儲行地址的指針變量,叫做行指針變量。
<存儲類型> <數據類型> (*<指針變量名>)[表達式]
方括號中的常量表達式表示指針加1,移動幾個數據。
當用行指針操作二維數組時,表達式一般寫成1行的元素個數,即列數。
字符指針與字符串
C語言通過使用字符數組來處理字符串
通常,我們把char數據類型的指針變量稱爲字符指針變量。字符指針變量與字符數組有着密切關係,它也被用來處理字符串。
初始化字符指針是把內存中字符串的首地址賦予指針,並不是把該字符串複製到指針中
在C編程中,當一個字符指針指向一個字符串常量時,不能秀愛指針指針指向的對象的值
練習:不用任何字符串函數,編程實現字符串連接函數的功能
#include<ctype.h>
int main(int argc, char *argv[])
{
char ch[30] = "hello world";
char *q, *p = "hello world";
int i = 0;
q = p;
while(*(ch+i) != '\0'){
i++;
}
while(*p != '\0'){
*(ch+i) = *p;
i++;
p++;
}
*(ch+i) = *p;
p = q;
puts(ch);
puts(p);
return 0;
}
結果: