这两个语句一样吗?求教!

jnqx 2003-08-20 04:03:28
while('\n' != (*p++ = *q++));

while(1)
{
*p=*q;
if(*p == '\n')
break;
p++;
q++;
}
请问,两句是一样的吗?有何差别?
我是初学,请各位致电!
...全文
29 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jnqx 2003-08-20
  • 打赏
  • 举报
回复
#include <iostream.h>
void fun( char *p, char *q)
{

while(1)
{
*p=*q;//假设此时*q='\n'前一个字符,*p=*q,可p!=q呀!
p++; //也就是,P++ != q++?
q++;
if(*p == '\n')//此将 p 改为 q,我就运行通了?请再次指教。谢谢!
break;
}
}
void main()//略
{
char a[20],b[20];
cin>>b;
fun(a,b);
cout<<a;
}
grail0922 2003-08-20
  • 打赏
  • 举报
回复
不一样:

while('\n' != (*p++ = *q++));

while(1)
{
*p=*q;
p++;
q++;
if(*p == '\n')
break;

}

你跟踪一下!!!!!!!!!!
sevecol 2003-08-20
  • 打赏
  • 举报
回复
我这里执行很正常亚。
jnqx 2003-08-20
  • 打赏
  • 举报
回复
sevecol:你写的有错!我运行了一下,p不知跑那去了?
将*q复制给*p;可是P++后在判断*p,那他会是什么呢?
请指教!
sevecol 2003-08-20
  • 打赏
  • 举报
回复
第一个拆开来是

while(1)
{
*p++ = *q++;
if (*p == '\n') break;
}

比如说char a[40]第一个就是'\n'
执行完第一个后,p指向第二个元素

执行完第二个后,p还是指向第一个元素。
nirvana_li 2003-08-20
  • 打赏
  • 举报
回复
错了,不是赋值,而是分配。
nirvana_li 2003-08-20
  • 打赏
  • 举报
回复
第一个P和第二个P的地址值怎么会相同呢?都应该是机器随机赋的值吧。

jnqx 2003-08-20
  • 打赏
  • 举报
回复
上面的程序有问题!?
*p++ = *q++;
执行完这一句,p会指向哪呢?
在判断下一句,怎么行?我搞不懂!请指教.
sevecol 2003-08-20
  • 打赏
  • 举报
回复
不相同

还有和 xiaoyunet(快乐的小猪)说的
方案1不会将'\n'从q复制到p。
jnqx 2003-08-20
  • 打赏
  • 举报
回复
退出循环,第一个p和第二个p的地址值相同吗?
xiaoyunet 2003-08-20
  • 打赏
  • 举报
回复
这样才是一样的。

while('\n' != (*p++ = *q++));

while(1)
{
*p++ = *q++;
if (*p == '\n') break;
}
xiaoyunet 2003-08-20
  • 打赏
  • 举报
回复
不一样,方案1不会将'\n'从q复制到p。
而方案而会复制。
sevecol 2003-08-20
  • 打赏
  • 举报
回复
不是完全一样的。

'\n'退出循环的p,q不一样。

第一个实现执行++再比较
第二个是先比较再++
xdzr 2003-08-20
  • 打赏
  • 举报
回复
一样的

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧