这里我们介绍两种方法。
- 第一种
#define TRUE 1
#define FALSE 0
int find_char(char **strings,char value){
char *string;
while((string = *strings++) != NULL){
while(*string != '\0'){
if(*string++ == value)
return TRUE;
}
}
return FALSE;
}
- 第二种
#define TRUE 1
#define FALSE 0
int find_char(char **strings,int value){
assert(strings != NULL);
while(*strings != NULL){
while(**strings != '\0'){
if(*(*strings)++ == value)
return TRUE;
}
strings++;
}
return FALSE;
}
这个程序中存在两个有趣的表达式:
第一个是**strings。第一个间接访问操作访问指针数组中的当前指针,第二个间接访问操作随该指针访问字符串中的当前字符。内层的while语句测试这个字符的值并观察是否到达了字符串的末尾。
第二个有趣的表达式是*(*strings)++。这里的括号是需要的,这样才能使表达式以正确的顺序进行求值。第一个间接访问操作访问列表中的当前指针。增值操作把该指针所指向的那个位置的值+1,但第二个间接访问操作作用于原先那个值的拷贝上。这个表达式的直接作用是对当前字符串中的当前字符进行测试,看看是否到达了字符串的末尾。作为副作用,指向当前字符串字符的指针值将增加1。