使用while循环将一个数组复制到另一个数组

时间:2018-05-02 08:21:29

标签: c arrays while-loop

我遇到了下面的一段代码,假设需要两个不同的字符数组,将它们复制到另一个然后打印出来;

#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的地址,但我真的不知道这里发生了什么的基本工作。任何帮助理解这一点将不胜感激。

1 个答案:

答案 0 :(得分:3)

要了解的事情:

  • *aa取消引用指针aa,因此访问正在指向的元素aa

  • aa++aa加1。由于aa是一个指针,它现在指向下一个元素。在评估之后会发生这种情况。

  • C中的字符串始终以0字节结尾。

  • 布尔上下文中,0 false ,其他任何值 true

    < / LI>
  • 作业评估已分配的值。

因此,在遍历字符串时,最终*aa将为0(字符串的结尾),这使得整个表达式(*bb++ = *aa++)的值为{{1} } - 在0条件内,这是假的,导致循环退出。