开发者社区> 问答> 正文

C语言\0与0的区别 以及while的判断

while("0")为什么会跳出
以下的while为什么又会跳出呢,因为以前是写PHP的不太理解,赋值不是一直会为真的吗?

请输入代码/ strcpy: 将 t 复制到s;指针版 3 /

 void strcpy(char *s, char *t)
  {     
      while (*s++ = *t++)         ; 
  } 

展开
收起
a123456678 2016-06-07 19:26:38 2769 0
1 条回答
写回答
取消 提交回答
  • 这个while判断的是s++ = t++表达式的值
    对,没错,C语言里的表达式也是有值的,比如逗号表达式的值1, 2, 3的值等于最右边数的值即3
    这个赋值表达式的值也是等于赋值完后的左值即s++,也即当前s的值
    所以当t到达末尾的时候会读到字符串结尾的0,即t为0,被赋值的s也是0,while里面是个0自然会跳出循环
    另外'0'的值为0,所以while('0')会跳出循环
    另外while("0")不会跳出循环,因为字符串常量的值实际山是它的地址,字符串常量的地址都不会是0

    2019-07-17 19:30:51
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载