C和指针 第六章 指针6.2 6.3字符串中查找的两个版本

int find_char(char **strings, char ch) 
{
	char *string;
	while ((string = *strings++) != NULL) {
		while (*string != '\0') {
			if (*string++ == ch) {
				return TRUE;
			}
		}
	}
	return FALSE;
}

无副作用版本,适合多次查找。

int find_char(char **string, char ch) 
{
	while (*string != NULL) {
		while (**string != '\0') {
              //*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”.

 

posted @ 2016-08-14 23:42  xnuwu  阅读(314)  评论(0编辑  收藏  举报