嵌入式day07

指針運算

指針的算術運算:

運算符 計算形式 意義
+ 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;
}

結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章