int find_char(char **strings, char ch) { char *string; while ((string = *strings++) != NULL) { while (*string != ' ') { if (*string++ == ch) { return TRUE; } } } return FALSE; }
无副作用版本,适合多次查找。
int find_char(char **string, char ch) { while (*string != NULL) { while (**string != ' ') {
//*string所指向的值被加一 if (*(*string)++ == ch) { return TRUE; } } string++; } return FALSE; }
有副作用版本,*(*string)++会改变*string处的的值,不适合多次查找。第一次查找后会破坏指针数组。
如图所示,第二次执行find_char函数时,因为第一次函数运行时,执行了两次*(*string)++找到了字符‘a’,所以*(*string)++,*string对于list[0],自增使list[0]增加两次,list[0]处存放的是指针,所以list[0]向右偏移了两位。从“yangxunwu”,变成“ngxunwu”.