| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1349 人关注过本帖
标题:一段代码,不理解
只看楼主 加入收藏
美丽的舞者
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-5-21
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:7 
一段代码,不理解
#include <stdio.h>

void My_strcpy(char * a, char * b)
{
    while (*b++ = *a++);
}
int main(void)
{
    char a[] = "hello whorld";
    char b[100] = {1};
    My_strcpy(a, b);
    printf("%s\n", b);
    getchar();
    return 0;
}


不懂while (*b++ = *a++);这一句whilex循环的结束条件是什么?是*a为"\0"时结束还是*b为"\0"时结束?
搜索更多相关主题的帖子: 代码 void char while 结束 
2018-06-08 20:18
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:4 
这是strcpy(*dst,*src)函数语句,是把a字符串赋给字符串b;这是简写,具体如下:
while((*b++=*a++)!='\0')这句作为条件,而,'\0'数值等于0,所以可以这么写,表示*b++=*a++为真。
而,(*b++=*a++)等价于。
*b=*a;
b++;
a++;
2018-06-08 20:30
美丽的舞者
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-5-21
收藏
得分:0 
回复 2楼 自学的数学
while((*b++=*a++)!='\0')
是当*a=="\0"时结束循环还是当*b=="\0"时结束循环
主要是不懂while()循环结束的条件
2018-06-08 20:53
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:4 
以下是引用美丽的舞者在2018-6-8 20:53:36的发言:

while((*b++=*a++)!='\0')
是当*a=="\0"时结束循环还是当*b=="\0"时结束循环
主要是不懂while()循环结束的条件

不是 *a 也不是 *b

是整个表达式 从头到尾的完整的 一个符号都不少的
(*b++=*a++)!='\0'
这个表达式为0的时候结束循环

这是一个 != 表达式
左右两边的子表达式求值结果一样的时候
这个表达式为 0

https://zh.
2018-06-08 21:11
美丽的舞者
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-5-21
收藏
得分:0 
以下是引用lin5161678在2018-6-8 21:11:20的发言:


不是 *a 也不是 *b

是整个表达式 从头到尾的完整的 一个符号都不少的
(*b++=*a++)!='\0'
这个表达式为0的时候结束循环

这是一个 != 表达式
左右两边的子表达式求值结果一样的时候
这个表达式为 0


左边的子表达式是(*b++=*a++)    右边的子表达式是"\0"
也就是(*b++=*a++)的值等于"\0"的时候,整个表达式的值为0
你说的试着个意思吗?
如果是这个意思的话, 那么左边的子表达式(*b++=*a++)在什么情况下等于"\0"?
2018-06-08 22:01
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 5楼 美丽的舞者
你可以用
printf("%d", a = b);
看一看 赋值表达式的求值结果

https://zh.
2018-06-08 22:22
美丽的舞者
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-5-21
收藏
得分:0 
回复 6楼 lin5161678
图片附件: 游客没有浏览图片的权限,请 登录注册


这是我重新写的一段代码
代码中 a[0]和b[0]的值相同
但是通过printf()函数打印出来的结果并不是0,而是该字符在ASCII对应的编号

如果真如您所说,可不可以提供一段代码让我看下
2018-06-09 10:54
美丽的舞者
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-5-21
收藏
得分:0 
回复 6楼 lin5161678
图片附件: 游客没有浏览图片的权限,请 登录注册


这是我重新写的一段代码
代码中 a[0]和b[0]的值相同
但是通过printf()函数打印出来的结果并不是0,而是该字符在ASCII对应的编号

如果真如您所说,可不可以提供一段代码让我看下
2018-06-09 10:54
快速回复:一段代码,不理解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036386 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved