C語言 指標例程 《C和指標》例程6 3 注釋

2021-09-29 23:54:38 字數 1466 閱讀 3905

《c和指標》的107頁 程式6.3 在一組字串中查詢:版本2

程式如下:

#include

#include

#define true 1

#define false 0

intfind_char

(char

**strings,

char value)

// 1

} strings++

;// 5

}return false;

}int

main()

;if(find_char

(strings,

'1')

== true)

else

printf

("%d\n"

, num)

;return0;

}

//	1	int find_char(char **strings, char value)

函式的第乙個引數是 ==

char

**strings==

首先,因為輸入引數並不是乙個字串,乙個知足字串。那麼他們是怎麼存放的呢?如 ==

//6== 及以下幾行所示,其將每個字串都存放在陣列中,此時,陣列名代表了字串的第乙個字元的首位址,及陣列名為char*型別。而strings是乙個存放字元位址的陣列,陣列名表示char位址的位址,所以其型別為char**型別 。

// 2 while (*strings != null)

此while迴圈用於遍歷字元陣列。

strings為存放字元陣列的陣列的陣列名,加上*表示第乙個元素,也就是其中儲存的字元陣列。若第乙個元素不為空說明還有字元陣列,此舉用來判斷strings陣列是否為空,也就是什麼時候跳出迴圈

// 3 while (**strings != '\0')

strings加上*表示第乙個元素,也就是其中儲存的字元陣列,那麼*

*strings就表示strings中儲存的第乙個字元陣列的第乙個字元。若其為'\n',則說明該字元陣列已經遍歷完畢。

// 4 if (*(*strings)++ == value)

該句可以分解為如下語句:if(

**strings == value)

(*strings)

++於括號的存在,需要先計算括號內的內容,即*strings,也就是第乙個strings內存放的第乙個字元陣列的首位址。然後在計算自增。由於四後置++,所以前面*修飾的相當於是*strings,也就是說去出了字元陣列中的第乙個字元,然後在檢視之後,在將陣列名指向下一位,達到讀取下一位的目的。

// 5 strings++

當跳出while(*

*strings !=

'\0'

)迴圈的時候,說明第乙個字元陣列已經遍歷完成,該遍歷下乙個字元陣列了。需要將strings指向下乙個字元陣列

函式指標例程一

有兩個我認為值得分析的指標例程,希望大家看了能對大家有幫助 eg1 include int main int p1 int a 1 int p2 int int a 1 int p3 int a 1 printf d,d,d n p1 1 p2 0 p3 1 return 0 這是第乙個例程,編譯之...

指標 指標的指標和陣列操作例程

include include include int main printf the data in pimg for int i 0 i 4 i pointer of pointer byte ppimg int k 4 ppimg new byte 2 for int i 0 i 2 i fo...

C語言條件編譯例程

1.條件編譯概念 一般情況下,源 檔案中的所有行都參加編譯,但有時需要指定一部分 在某個條件下才被編譯,這就叫做 條件編譯 2 條件編譯詳解 條件編譯 發生在預處理階段,在c中,主要通過 if elif else ifdef ifndef endif來給一段 附加上編譯條件,然後 預處理器 收集滿足...