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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 愿我能 中级黑马   /  2014-4-22 09:13  /  1381 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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语言的指针真是没学好

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

5 个回复

倒序浏览
*(p+1)是根据指针类型移动类型的字节数,也就是int类型指针移动4个字节,如果是数组就是数组的下一个元素
*p+1,如果指向数组a[5],则*p+1则指向a[5]位置,而a[5]只到a[4],所以指向的位置为空。
回复 使用道具 举报
   s[i++] = *p++;

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

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

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

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

;P看到楼主这个问题,我脑中迅速勾勒出了楼主下载了入学测试然后 百度答案,然后看答案填注释的场景
回复 使用道具 举报
董月峰 发表于 2014-4-22 09:59
看到楼主这个问题,我脑中迅速勾勒出了楼主下载了入学测试然后 百度答案,然后看答案填注释的场景 ...

这个入学测试是很久前没明白的地方,现在该面试了 所以想把不解的地方好好过一遍 大神求罩啊
回复 使用道具 举报
在c语言中
++的优先级大于*
i=*p++ 相当于 i=*(p++),又相当于 i=*p; p++;
并不是p自身加1后取该指针所指的值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马