《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來給一段 附加上編譯條件,然後 預處理器 收集滿足...