黑马程序员技术交流社区

标题: C语言 去除字符串空格问题 [打印本页]

作者: 愿我能    时间: 2014-4-22 09:13
标题: C语言 去除字符串空格问题
  1. #include <stdio.h>
  2. void fun(char *s)
  3. {
  4.     char *p = s;
  5.     int i = 0;
  6.     while(*p)
  7.     {
  8.         if(*p != ' ')
  9.             s[i++] = *p++;
  10.         else
  11.             p++;
  12.     }
  13.     s[i] = '\0';
  14. }
  15. int main()
  16. {
  17.     char s[] = "dsfd sf s d  f";
  18.     fun(s);
  19.     puts(s);
  20.     return 0;
  21. }
复制代码
关于
  1.    s[i++] = *p++;
复制代码
这一块不太明白,指针p+1具体是什么意思,c语言的指针真是没学好
作者: FlyTrem    时间: 2014-4-22 09:20
*(p+1)是根据指针类型移动类型的字节数,也就是int类型指针移动4个字节,如果是数组就是数组的下一个元素
*p+1,如果指向数组a[5],则*p+1则指向a[5]位置,而a[5]只到a[4],所以指向的位置为空。
作者: 戴文婷    时间: 2014-4-22 09:26
   s[i++] = *p++;

1.p是指针。*p是指针指向的内容
2.*p++中。++的运算符优先级>*,所以先晕眩p++ ,在执行*p读取p指向的内容
3.字符数组名就是字符数组的首地址,也可以直接认为,字符数组名就指向字符数组的指针。

数组是连续存放的。首地址,就是第一个数组元素,首地址+2就是第二个数组元素。以此类推。

作者: 董月峰    时间: 2014-4-22 09:59
本帖最后由 董月峰 于 2014-4-22 10:03 编辑
  1. char *p = s;
  2. // 意思是指针p指向字符数组(字符串)的首字符的内存。
  3. p + 1,意思就是指向下标为 0 +1 的字符的 内存。
复制代码

;P看到楼主这个问题,我脑中迅速勾勒出了楼主下载了入学测试然后 百度答案,然后看答案填注释的场景
作者: 愿我能    时间: 2014-4-22 11:33
董月峰 发表于 2014-4-22 09:59
看到楼主这个问题,我脑中迅速勾勒出了楼主下载了入学测试然后 百度答案,然后看答案填注释的场景 ...

这个入学测试是很久前没明白的地方,现在该面试了 所以想把不解的地方好好过一遍 大神求罩啊
作者: 星河鹭起    时间: 2014-4-22 12:42
在c语言中
++的优先级大于*
i=*p++ 相当于 i=*(p++),又相当于 i=*p; p++;
并不是p自身加1后取该指针所指的值




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