这里我们介绍两种方法。
- 第一种
#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。