A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Aliu 中级黑马   /  2016-4-14 21:49  /  1221 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1,下面程序的输出是什么?

  1. #include <stdio.h>
  2. main () {
  3.     char s[] = "Hsjodi", *p;
  4.     for ( p = &s[5] ; p >= s ; p-- ) --*p ;
  5.     puts (s) ;
  6.     return 0 ;
  7. }
复制代码


2,函数如下所示:

  1. int f (char *s, char *t) {
  2.     char *p1 ,*p2;
  3.     for(p1 = s ; *p1 ; p1++) {
  4.         for(p2 = t ; *p2 ; p2++)
  5.             if (*p1 == *p2)  break ;
  6.         if (*p2 == '\0')  break ;
  7.     }
  8.     return p1 - s ;
  9. }
复制代码

(a)f("abcd","babc")的值是多少?
(b)f("abcd","bcd")的值是多少?
(c)通常情况下,当传递两个字符串s和t时,函数的返回值是什么?


想了半天想不出来有大神告诉我吗?

3 个回复

倒序浏览
  1.     char s[] = "Hsjodi", *p;
  2. //    循环对数组的地址进行遍历,并用p指针去指向遍历的地址,循环体中--*p是已经做了计算后的值,
  3. //    比如说 H-1 = G, 这样数组的每一个字符减1,所以字符数组已经发生了改变,最终输出结果为Grinch
  4.     for ( p = &s[5] ; p >= s ; p-- ) --*p ;
  5.     puts (s) ;
复制代码
回复 使用道具 举报
第二个问题的:
  1. int f (char *s, char *t) {
  2.     char *p1 ,*p2;
  3.     for(p1 = s ; *p1 ; p1++) {
  4. //        p1 依次指向字符串的字符地址,p1 = s 是从s的首地址开始
  5.         for(p2 = t ; *p2 ; p2++){
  6. //           如果*p1和*p2相等,跳出循环,也就是p1指向的字符与p2指向的字符相等,循环结束
  7.             if (*p1 == *p2)  break ;
  8.         }
  9. //        如果p2指向t字符串的结束符'\0',跳出循环
  10.         if (*p2 == '\0')  break ;
  11.     }
  12. //    返回的结果是p1指向s字符串的字符地址与首地址的间隔
  13. //    一般情况s字符串的首字母没有在t字符串中出现,则返回0
  14.     return p1 - s ;
  15. }
复制代码


问题:
f("abcd","babc")的值是3
f("abcd","bcd")的值是0
回复 使用道具 举报
落寒 发表于 2016-4-15 10:42
第二个问题的:

多谢了,能看懂了,尤其是第二个,论坛里高手多啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马