作业帮 > 综合 > 作业

c语言中*s++=*p是什么意思

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/24 21:56:11
c语言中*s++=*p是什么意思
*s和*p是指向数组的指针
这个就是看运算符优先级,

++运算符最高,接着是*运算符,接着是=运算符.

++是后置运算,先不管,
*是对指针指向地址取内容, 所以就是右边p指针指向的内容赋值到左边s指针指向的内容,
这个赋值操作完成后,++运算会让s指向下一个地址处.

举例:
char a[]= {'a', 'b', 'c'};
char b[]= {'1', '2', '3'};

char *s = a, *p = b;
那么*s++=*p等价于
{
a[0]=b[0]; //赋值
s = &a[1]; //s指针移位
}
再问: 那么这个语句对*p指针的值有影响么?
再答: 当然没有,它在赋值号的右边。 *运算符只是读取内存中的内容
再问: #include void delchar(char *s,char c) { char *p; for(p=s;*s;s++) if(*s!=c) *p++=*s; *p='\0'; } void main() { char c,s[100]; printf("输入字符串:"); gets(s); printf("输入要删除的字符:"); scanf("%c",&c); delchar(s,c); printf("%s\n",s); } 这段程序又怎么解释呢~~这才是让我困扰的地方
再答: for(p=s;*s;s++) if(*s!=c) *p++=*s; 字符串的结束符为'\0', 对应ascii码为 0, 所以这个for循环退出条件是当s指针指向最后结束符时。 p和s一开始都指向字符数组的起始位置, 当s指向内容不为要删除字符时,p和s分别指向各自的下一位 当s指向内容是要删除的字符时,只有s移动了,p没动。 当循环结束时,p指向位置之前如果曾存储过要删除字符,必然都已经被它后面的字符覆盖了。 *p='\0'; 最后将字符串结束符 赋值到p指向的最后一处内存。