黑马程序员技术交流社区
标题:
C语言 去除字符串空格问题
[打印本页]
作者:
愿我能
时间:
2014-4-22 09:13
标题:
C语言 去除字符串空格问题
#include <stdio.h>
void fun(char *s)
{
char *p = s;
int i = 0;
while(*p)
{
if(*p != ' ')
s[i++] = *p++;
else
p++;
}
s[i] = '\0';
}
int main()
{
char s[] = "dsfd sf s d f";
fun(s);
puts(s);
return 0;
}
复制代码
关于
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 编辑
char *p = s;
// 意思是指针p指向字符数组(字符串)的首字符的内存。
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