我遇到了下面的一段代码,假设需要两个不同的字符数组,将它们复制到另一个然后打印出来;
#include <stdio.h>
void main()
{
char a[15] = "hello";
char b[15] = "goodbye";
char * aa = a, *bb = b;
while ( (*bb++ = *aa++) );
printf("%s,%s\n",a,b);
}
我不确定while语句是如何在这里工作的。看起来它正在将b的地址复制到a的地址,但我真的不知道这里发生了什么的基本工作。任何帮助理解这一点将不胜感激。
答案 0 :(得分:3)
要了解的事情:
*aa
取消引用指针aa
,因此访问正在指向的元素aa
aa++
将aa
加1。由于aa
是一个指针,它现在指向下一个元素。在评估之后会发生这种情况。
C中的字符串始终以0
字节结尾。
在布尔上下文中,0
false ,其他任何值 true
作业评估已分配的值。
因此,在遍历字符串时,最终*aa
将为0
(字符串的结尾),这使得整个表达式(*bb++ = *aa++)
的值为{{1} } - 在0
条件内,这是假的,导致循环退出。