C语言选择题,下列函数的功能是()
intf(char*a,char*b){while(*a++==*b++);if(*(a-2))return*(--a)-*(--b);答案是字符串比较,我根本不明白那个...
int f(char *a, char *b) { while (*a++ = = *b++) ; if(*(a-2)) return *(--a)-*(--b);
答案是字符串比较,我根本不明白那个a-2,咋回事。。。
希望能有具体完整的解释,不要光说a-2 展开
答案是字符串比较,我根本不明白那个a-2,咋回事。。。
希望能有具体完整的解释,不要光说a-2 展开
2个回答
展开全部
这个函数参数表里定义了两个指针a和b,分别指向两个字符串。执行while(*a++==*b++);语句时,我们知道,这条语句会在里面的条件成立时一直循环,也就是说,直到条件不成立才会执行后面的if语句。通过指针的++,指针会不断向后移,指向字符串的下一个元素,这个你知道吧?当条件不成立,也就是*a处这个元素不等于*b指向的字符串对应的位置的元素时(a和b同时++,位置是对应的),还要注意,这里用的是后++,这个语句其实相当于*a==*b,a++,b++,在不等于之后指针仍然向后移一位,所以while结束时,指针指向不相等元素的后一个位置。
这些懂了,后面a-2其实就是不相等元素的前一个位置,if语句判断这个位置是否为空,不为空时,输出--a,这里是前--,先进行a--,再return a,而a--后a就指向不相等元素的位置。
还有哪里看不懂?
这些懂了,后面a-2其实就是不相等元素的前一个位置,if语句判断这个位置是否为空,不为空时,输出--a,这里是前--,先进行a--,再return a,而a--后a就指向不相等元素的位置。
还有哪里看不懂?
追问
return *(--a)-*(--b);,应该是将不相等的那个位置的两个东东相减然后返回吧
追答
对,我看错了,sorry
展开全部
楼主能不能贴一个全的代码,只看这一点代码的话,这代码里面全是BUG呀。
int f(char *a, char *b)
{
while (*a++ == *b++) ; //找到第一个不一样的字符
if(*(a-2)) //这个可能会访问到非法的地址的
return *(--a)-*(--b); //两个不相同的字符想减
}
比如char * a = "dbc" char * b = "avcdbc"
经过while (*a++ == *b++)之后
a变成了"bc" b变成了“vcdbc”
这样a - 2之后就访问到了字符串前面的地址,这个地址里面的值怎么能确定呢?这种也是非法的字符串越界访问呀。
追问
这是一道二级原题,就是选择,哪里来的完全的代码。。。不过还是辛苦了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询