C字符串二维指针的一个问题
看C和指针的时候看到一个这样的函数:
int find_char(char string,int val)
{
assert(string != NULL);
while(string != NULL)
{
while((string)!= ‘\0’)
{
if((string)++ == val)
return 1
}
string++
}
return 0
}
{
assert(string != NULL);
while(string != NULL)
{
while((string)!= ‘\0’)
{
if((string)++ == val)
return 1
}
string++
}
return 0
}
书上说这个函数有副作用,只适合一次查询的情况,由于本人愚笨,一时没看出来到底是怎么搞的,于是今天上机一试,才知道原来是((string)++ == val)这句的问题,这句会把找到之前的那些字符都给过滤掉,之后就再也找不回来了,就好像被大灰狼叼走之后一样~~~.我的想法是string是一个一维指针,是由string这个二维指针通过间接访问得到的,所以在函数里面改过之后,在原数组也是会有效果的,就好像一个一维数组,然后*num=5这样的语句一样,不过这里的间接访问之后还是一个指针而已.如果有什么错误,还请看官指出.这里附上我做试验的string和输出
string = {“abc”,”cb”,”de”}//当然你不能直接这么赋值
然后我输出整个string,格式如下:
while(string != NULL)
{
printf(“%s\n“,string);
string++
}2
{
printf(“%s\n“,string);
string++
}2
结果如下
e//上面的下划线表示没有输出.