黑马程序员技术交流社区

标题: C里关于指针与字符串小练习的一点疑惑,请各位大神帮个忙~ [打印本页]

作者: 彈指っ紅顏老    时间: 2014-11-21 23:16
标题: C里关于指针与字符串小练习的一点疑惑,请各位大神帮个忙~
在c里面指针与字符串那一部分有这么一个小练习:编写一个int string_len(char *s),返回字符串s的字符长度


  1. //        编写一个int string_len(char *s),返回字符串s的字符长度

  2. #include <stdio.h>

  3. int string_len(char *s);

  4. int main()

  5. {
  6.     printf("请输入一个字符串:\n");
  7.     char a[20];
  8.     scanf("%s",a);
  9.     int size=string_len(a);
  10.     printf("字符串的长度为%d\n",size);
  11.     return 0;

  12. }
  13. int string_len(char *s)
  14. {
  15.     char *p=s;//把指针p指向s第一个元素,即让p为s的初始值
  16.     while (*s++);//当*s不为0时,s自增
  17.     return (s-p-1);//最后的s减去s的初始值再减去多自增的1,即为字符个数
  18.    
  19.     /*
  20.     int i=0;//设置计数器
  21.     while (*s!='\0')//只要没到'\0'字符串就没结束
  22.     {
  23.         s++;//让指针地址自增1看下一个字节
  24.         i++;//计数器+1
  25.     }
  26.     return i;//返回计数器的值即为字符串长度
  27.      */
  28. }
复制代码
函数里面后面是我自己写的,然后看了老师写的前面的那种方法,倒是能顺出详细的思路,可是我比较疑惑的是,当*s指向‘\0’的时候,返回值是0吗?还有就是虽然*在这里不是运算符不用考虑优先级的问题,可是也就是说我们不能用指针对指向的变量进行自增自减吗?我自己有点绕晕了,望大神们指教啊~~~



作者: weizhang00    时间: 2014-11-22 00:25
没看懂你想说什么关于 用指针对指向的变量进行自增自减吗? 这句
(*s)++;是这样么?,不加括号就是*(s+1)


‘\0'的ASNII码就是0啊
作者: 彈指っ紅顏老    时间: 2014-11-22 01:20
weizhang00 发表于 2014-11-22 00:25
没看懂你想说什么关于 用指针对指向的变量进行自增自减吗? 这句
(*s)++;是这样么?,不加括号就是*(s+1)

嗯嗯,关于指针指向的变量自增自减看来加上个括号就可以了~是我自己晕了= = 谢谢!
我查了下ASCII码表,ASCII码值是0对应的字符是NUT,就是\0吗?
作者: weizhang00    时间: 2014-11-22 02:24
彈指っ紅顏老 发表于 2014-11-22 01:20
嗯嗯,关于指针指向的变量自增自减看来加上个括号就可以了~是我自己晕了= = 谢谢!
我查了下ASCII码表,A ...

其实,你自己打印下\0的%d就知道啦,也不用死背那个表
作者: 彈指っ紅顏老    时间: 2014-11-22 11:10
weizhang00 发表于 2014-11-22 02:24
其实,你自己打印下\0的%d就知道啦,也不用死背那个表

哈哈,也是啊~谢谢啦!
作者: wang2003    时间: 2014-11-22 22:37
字符串的结尾是‘\0'.当遇到了'\0',就认为是字符串结束了。
所以  
    while (*s!='\0')//只要没到'\0'字符串就没结束
意思是没遇到'\0',计数器就继续增加,遇到了,就不再增加了。
      




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2