2个小疑问

kisskissbye 2009-04-19 12:31:39
已知strcpy函数的原型是

char *strcpy(char *strDest, const char *strSrc);
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ ) // here
NULL ;
return address ;
}

1. *strDest++为什么不是(*strDest)++的意思
2. 类似:while((ch = next_char() ) != '\n') 这样的赋值表达式被当作一个子表达式怎么理解呢?
第一步next_char()赋值给ch,第二步:ch != '\n'
可是这里第二步是测试*strSrc != '\0' ,取的是=号后面的
...全文
61 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kisskissbye 2009-04-19
  • 打赏
  • 举报
回复
我都明白了,谢谢!

*和++的优先级原来相同,我一直以为*比++优先级高
fibbery 2009-04-19
  • 打赏
  • 举报
回复
*strDest++中,*和++的优先级相同,其运算顺序是从右到左,那么先进行++操作,后缀的++表达式仍然返回增加操作前的值,那么意味着*操作返回的是++前的指针所指向的内容。由于strDest是非const的,所以,可以作为左值出现在赋值运算符的左边。

*strSrc++的道理和*strDest++的道理一致。

赋值表达式所返回的值是等号最右边的表达式的值,也就是返回*strSrc的值,当*strSrc为'\0'时,表示字符串已经结束。整个复制过程也就结束了。
  • 打赏
  • 举报
回复
1. *strDest++为什么不是(*strDest)++的意思
*strDest++是要对指针后移,处理后面的数据,你(*strDest)++是对数据++,是修改指针指向的数据


2. 类似:while((ch = next_char() ) != '\n') 这样的赋值表达式被当作一个子表达式怎么理解呢?
第一步next_char()赋值给ch,第二步:ch != '\n'
可是这里第二步是测试*strSrc != '\0' ,取的是=号后面的


我不知道你说什么,while( (*strDest++ = * strSrc++) != ‘\0’ ) // here
只要strSrc指向的数据不是'\0',也就是说字符串没到结尾,就继续copy。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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